用C写一个自动执行SQL语句的程序
用C#写一个自动执行SQL语句的程序,要求把多个SQL存在TXT文件里,然后用程序调用挨个执行,设置执行时间而且是到点自动执行
sql定时执行存储过程
--创建作业
--创建作业exec?msdb。。sp_add_job?@job_name='数据处理'
--创建作业步骤declare?@sql?varchar(800),@dbname?varchar(250)select?@sql='exec?p_proc'--要定时执行的存储过程,@dbname=db_name()?--执行数据处理的数据库名
exec?msdb。
。sp_add_jobstep?@job_name='数据处理',@step_name?=?'数据同步',@subsystem?=?'TSQL',@database_name=@dbname,@command?=?@sql,@retry_attempts?=?5,?--重试次数@retry_interval?=?5--重试间隔
--创建调度EXEC?msdb。
。sp_add_jobschedule?@job_name?=?'数据处理',?@name?=?'时间安排',@freq_type=44???--4?每天,8?每周,16?每月@freq_interval=14???--作业执行的天数@freq_subday_type=04???--是否重复执行,0x1?在指定的时间,?0x4?分钟,?0x8?小时?@freq_subday_interval=1,?--重复周期@freq_recurrence_factor=04??--重复执行,则设置为1,否则设置为0@active_start_time?=?00000?--0点开始执行
如果在SQL?Server?里定时执行存储过程需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL?Server代理->作业来实现。
1、管理->SQL?Server代理->作业(按鼠标右键)->新建作业->
2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->
分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL?Server用户[也可选其它的登录]->
描述[填写本次工作详细描述内容];
[?创建作业分类的步骤:?SQL?Server代理->作业->右键选所有任务->添加、修改、删除?]
3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->
数据库[要操作的数据库]->命令[?如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*。
sql文件?如果要执行存储过程,填?exec?p_procedure_name?v_parameter1,[?v_parameter2…v_parameterN]?]->确定(如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);
4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现->
更改[调度时间表]->确定(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);
5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows应用程序系统日志]?->确定。
跟作业执行相关的一些SQL?Server知识:
SQLSERVERAGENT服务必须正常运行,启动它的NT登录用户要跟启动SQL?Server数据库的NT登录用户一致。
点作业右键可以查看作业执行的历史记录情况,也可以立即启动作业和停止作业。
最近在看作业历史记录时,发现有的作业记录的历史记录多,有的作业记录的记录的历史记录少。
如何能使某些作业按各自的需求,保留一段时间。比如保留一个月的历史记录。
看了SQL?Server的在线帮助文档,里面介绍说:
在管理->SQL?Server代理->右键选属性->作业系统->限制作业历史记录日志的大小->
作业历史记录日志的最大大小(行数)默认为1000如果某台机器的作业数量很多,一定要提高它,例如为100000
每个作业历史记录日志的最大行数?默认为100如果作业每天执行两次,需要保留一个月的日志,可以设为60
它们之间有一个相互制约关系,?我们可以根据自己的需要来改。
如果在SQL?Server?里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL?Server代理->作业来实现。
如果SQL?Server服务器改过机器名,?管理是旧名称时建立的job的时候可能会遇到
错误14274:?无法添加、更新或删除从MSX服务器上发起的作业(或其步骤或调度)
看了Microsoft的文档后说SQL?Server?2000系统里msdb。
。sysjobs?里originating_server?字段里存的是原来的服务器的名称。
24X7在用的系统肯定不能按上面Microsoft的文档说的那样把名字改回来又改过去。
于是想,msdb。
。sysjobs?能否update?originating_server?字段成现在在用的新服务器名?
use?msdb
select?*?from?sysjobs
找到originating_server?字段还是旧服务器的job_id,?然后执行update语句:
update?sysjobs?set?originating_server='new_server_name'where?job_id='B23BBEBE-A3C1-4874-A4AB-0E2B7CD01E14'
(所影响的行数为?1?行)
这样就可以添加、更新或删除那些曾经出error?14274?的作业了。
如果想把作业由一台机器迁移到另一台机器,可以先保留好创建作业的脚本,?然后在另一台机器上运行。
导出所有作业的创建脚本操作步骤:
管理->SQL?Server代理->作业(鼠标右键)->所有任务->生成SQL脚本->保存到操作系统下的某个sql文件
导出某一个作业的创建脚本操作步骤:?管理->SQL?Server代理->作业->选中待转移的作业(鼠标右键)->所有任务->生成SQL脚本->保存到OS下的某个sql文件
然后在目的服务器上运行刚才保存下来的创建作业的sql脚本。
(?如果建作业的用户或者提醒的用户不存在,?则会出错;?
我们需要在目的服务器上建立相关的WINDOWS用户或者SQL?Server数据库登录,?
也可以修改创建作业的脚本,?把目的服务器上不存在的用户替换成已经有的用户。
?如果生成日志的物理文件目录不存在,也应该做相关的修改,例如d:区转f:区等?字符串的?@command?命令里有分隔符号?go?也会出错,?可以把它去掉)
此文章详细的介绍了sql定时执行存储过程,希望能给大家带来帮助。
。
这些SQL语句是只执行一次,还是每天都要定时执行,可以使用Timer定时器,至于从文本文件里面获取内容,只需要用文件读取的类就行了!
在winform用文件流的方式去读取txt文件内容,用Timer定时器设置时间
你只需要写个可以读取txt的内容的,同时能执行这个txt中sql的处理就可以了。之后可以用windows的任务计划来设置定时任务
C#写service服务 ? ?到时间从txt中读取sql语句 ?然后执行就行了
写成一个存储过程,直接执行该多好
winform用文件流的方式去读取txt文件内容,用Timer定时器设置时间
在C#中用winform的话,首先得你的SQL语句要规范,把SQL语句写到TXT文本中,然后通过WINFORM读取,然后通过数据库执行操作执行即可,至于按时间执行的问题,就加一个定时器即可。
方法一(推荐). SqlServer中代理服务中有定时作业功能
方法二
1. system.io.file 读取文本内容
2. 数据库方法关联
3. 定时器方法关联
答:最大的可能是你单独执行时用的账号,跟你存储过程所用的账号不一致。SQL中的表或视图在存储过?程下的账号没查询权限。 解决办法: 赋查询权限给存储过程所在的账号?...详情>>
答:不知道你是不是写错文件名了,pdf?详情>>
答:当电脑的全部组件(包括软件)我们国家都能生产的时候。详情>>