使用脚本生成sqlserver作业的方法
- 格式:pdf
- 大小:41.76 KB
- 文档页数:2
sqlserver cmdexec 作业步骤在SQL Server中,cmdexec作业步骤用于在作业中执行命令提示符的命令或批处理脚本。
这种类型的作业步骤可以在SQL Server代理中配置,以满足特定的需求或自动化任务。
作业步骤概述:SQL Server代理是一个用于自动化管理和执行任务的强大工具。
而cmdexec作业步骤是SQL Server代理中的一种特殊类型,允许用户执行命令提示符的命令或批处理脚本。
通过使用cmdexec作业步骤,可以在任务完成之前执行各种类型的命令,并将结果反馈给SQL Server代理。
配置cmdexec作业步骤:要配置cmdexec作业步骤,请按照以下步骤进行操作:1. 打开SQL Server管理工作室,并连接到目标SQL Server实例。
2. 展开“SQL Server代理”节点,并选择“作业”文件夹。
3. 右键单击“作业”文件夹,选择“新建作业”选项。
4. 在“常规”选项卡中,输入作业的名称和描述。
5. 切换到“步骤”选项卡,然后点击“新建”按钮。
6. 在“新建作业步骤”对话框中,选择“类型”为“操作系统(cmdexec)”。
7. 在“命令”文本框中,输入要执行的命令或批处理脚本的路径。
8. 可以选择是否在指定的目录中执行命令,或者在默认目录中执行。
9. 配置其他相关参数,如使用代理账户、重试次数等。
10. 完成后,点击“确定”保存设置。
示例:下面是一个简单的示例,展示如何使用cmdexec作业步骤执行一个批处理脚本。
1. 打开SQL Server管理工作室,并连接到目标SQL Server实例。
2. 展开“SQL Server代理”节点,并选择“作业”文件夹。
3. 右键单击“作业”文件夹,选择“新建作业”选项。
4. 在“常规”选项卡中,输入作业的名称和描述,比如“执行批处理脚本”。
5. 切换到“步骤”选项卡,点击“新建”按钮。
6. 在“新建作业步骤”对话框中,选择“类型”为“操作系统(cmdexec)”。
ASP实现对SQLSERVER数据库的操作ASP(Active Server Pages)是一种用于创建动态网页的编程语言,结构类似于传统的HTML页面,但通过嵌入服务器脚本来实现网页的动态功能。
在ASP中,可以使用各种数据库管理系统进行数据库的操作,包括SQL Server数据库。
下面是ASP实现对SQL Server数据库的操作的一般步骤:1.创建连接字符串:首先需要创建一个连接字符串来指定连接的数据库。
连接字符串包括数据库服务器的名称、数据库名称、用户名和密码等信息。
2. 创建连接对象:使用连接字符串来创建一个连接对象,该对象将用于与SQL Server数据库建立通信。
3. 打开连接:通过调用连接对象的Open方法来打开与数据库的连接。
4. 执行SQL语句:使用连接对象可以执行各种SQL语句,包括查询、插入、更新和删除等操作。
可以使用Connection对象的Execute方法来执行SQL语句,并返回一个记录集对象。
5. 处理查询结果:如果执行的是查询语句,得到的结果将以记录集的形式返回。
可以使用Recordset对象来处理这些结果,比如遍历记录、获取字段值等等。
6. 关闭连接:在完成数据库操作后,需要调用连接对象的Close方法来关闭与数据库的连接。
下面是一个简单的ASP代码示例,用于连接到SQL Server数据库并执行查询操作:<html><body><%'创建连接字符串connStr = "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=myDatabase;User ID=myUsername;Password=myPassword;"'创建连接对象Set conn = Server.CreateObject("ADODB.Connection")'打开连接conn.Open connStr'执行查询语句sql = "SELECT * FROM myTable"Set rs = conn.Execute(sql)'处理查询结果While Not rs.EOFResponse.Write "ID: " & rs("ID") & ", Name: " & rs("Name") & "<br>"rs.MoveNext'关闭连接rs.Closeconn.Close%></body></html>```在上述代码中,我们首先创建了一个连接字符串以指定连接到SQL Server数据库。
sqlserver新建作业步骤第一步:打开SQL Server管理器在开始菜单中找到SQL Server管理器的图标,点击打开。
如果没有找到该图标,可以在搜索栏中输入“SQL Server管理器”进行搜索。
第二步:连接到SQL Server实例在SQL Server管理器中,展开“SQL Server代理”,然后右键单击“作业”文件夹,选择“新建作业”。
接下来会弹出一个新建作业的对话框。
第三步:填写作业名称和描述在新建作业的对话框中,首先需要填写作业的名称和描述。
作业名称应该能够清晰地反映该作业的用途,方便后续的管理和查询。
第四步:添加作业步骤在新建作业的对话框中,点击左侧的“步骤”选项卡,然后点击“新建”按钮。
接下来会弹出一个新建作业步骤的对话框。
第五步:填写作业步骤名称和类型在新建作业步骤的对话框中,首先需要填写作业步骤的名称和类型。
作业步骤名称应该能够清晰地反映该步骤的功能,方便后续的管理和查询。
作业步骤类型可以根据具体需求选择,比如可以选择“Transact-SQL脚本(SQL Server数据库引擎)”类型来执行一段SQL语句。
第六步:配置作业步骤在新建作业步骤的对话框中,根据具体需求配置该步骤的相关参数。
例如,如果选择了“Transact-SQL脚本(SQL Server数据库引擎)”类型,就可以在“命令”文本框中输入要执行的SQL语句。
第七步:配置作业调度在新建作业的对话框中,点击左侧的“调度”选项卡,然后点击“新建”按钮。
接下来会弹出一个新建作业调度的对话框。
第八步:配置作业调度计划在新建作业调度的对话框中,根据具体需求配置该调度的相关参数。
例如,可以设置作业的执行频率、执行时间等。
可以通过点击“高级”按钮进一步配置作业的调度选项,比如可以设置作业的重试次数、失败处理方式等。
第九步:保存作业在新建作业的对话框中,点击“确定”按钮保存作业。
此时,新建的作业就会出现在SQL Server管理器中的“作业”文件夹下。
SQLserver使⽤作业定时执⾏脚本具体步骤:企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输⼊作业名称--"步骤"项--新建--"步骤名"中输⼊步骤名--"类型"中选择"Transact-SQL 脚本(TSQL)"--"数据库"选择执⾏命令的数据库--"命令"中输⼊要执⾏的语句:下⾯是备份数据库,并且删除15天以前备份的版本DECLARE @strPath NVARCHAR(200)DECLARE @strPathDel NVARCHAR(200)set @strPath =convert(NVARCHAR(19),getdate(),112)set @strPathDel =convert(NVARCHAR(19),getdate()-15,112)set @strPath ='D:\备份\服务器⾃动备份\'+'JSOA2010'+@strPath +'.bak'set @strPathDel ='del '+'D:\备份\服务器⾃动备份\'+'JSOA2010'+@strPathDel +'.bak'BACKUP DATABASE [JSOA2010] TO DISK= @strPath WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMATexec master..xp_cmdshell @strPathDel--确定--"计划"项--新建计划--"名称"中输⼊计划名称--"计划类型"中选择你的作业执⾏安排--定为每天计划⼀次,时间为18:40即可--如果选择"反复出现"--点"更改"来设置你的时间安排然后将SQL Agent服务启动,并设置为⾃动启动,否则你的作业不会被执⾏设置⽅法:我的电脑--控制⾯板--管理⼯具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"⾃动启动"--确定.如果报“SQL Server 阻⽌了对组件'xp_cmdshell'的过程'sys.xp_cmdshell'的访问-12-30 13:35”错误解决⽅法:执⾏下⾯的语句-- To allow advanced options to be changed.EXEC sp_configure'show advanced options', 1GO-- To update the currently configured value for advanced options.RECONFIGUREGO-- To enable the feature.EXEC sp_configure'xp_cmdshell', 1GO-- To update the currently configured value for this feature. RECONFIGUREGO。
SqlServer 执行sql脚本操作步骤说明1、打开sqlserver 企业管理器
2、在菜单栏中,打开“工具”—“sql查询分析器”
3、打开的sql查询分析器是这个样子的:
4、在sql查询分析器的工具栏中,点击打开文件的小图标,如图(红圈部分):
5、然后弹出打开文件对话框,找到需要执行的sql脚本文件,如图:
6、打开该sql脚本文件后,sql查询分析器里变成下图的样子,然后执行红圈处得那个绿色
箭头按钮:
7、现在数据库的升级就在进行中了,升级成功后应该会变成这个样子:
如果升级过程中遇到错误,出现的提示不会是这样。
如果升级过程中遇到错误,请截图并联系客服人员。
SQLSERVER⽣成建表脚本/****** Object: StoredProcedure [dbo].[GET_TableScript_MSSQL] Script Date: 06/15/2012 11:59:00 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO/*==============================================================名称: GET_TableScript_MSSQL功能: 获取customize单个表的mysql脚本创建:2010年5⽉12⽇参数:@DBNAME --数据库名称@TBNAME --表名@SQL --输出脚本==============================================================*/ALTER PROCEDURE[dbo].[GET_TableScript_MSSQL] (@DBNAME varchar(40),@TBNAME VARCHAR(100),@SQL VARCHAR(max) OUTPUT) AS declare@table_script nvarchar(max) --建表的脚本declare@index_script nvarchar(max) --索引的脚本declare@default_script nvarchar(max) --默认值的脚本declare@check_script nvarchar(max) --check约束的脚本declare@sql_cmd nvarchar(max) --动态SQL命令declare@err_info varchar(200)set@tbname=UPPER(@tbname);if OBJECT_ID(@DBNAME+'.dbo.'+@TBNAME) is nullBEGINset@err_info='对象:'+@DBNAME+'.dbo.'+@TBNAME+'不存在!'raiserror(@err_info,16,1)returnEND----------------------⽣成创建表脚本------------------------------1.添加算定义字段set@table_script='CREATE TABLE '+@TBNAME+'('+char(13)+char(10);--添加表中的其它字段set@sql_cmd=N'use '+@DBNAME+'set @table_script=''''select @table_script=@table_script+'' [''++''] ''+(case when t.xusertype in (175,62,239,59,122,165,173) then ''[''++''] (''+convert(varchar(30),isnull(t.prec,''''))+'')''when t.xusertype in (231) and t.length=-1 then ''[ntext]''when t.xusertype in (231) and t.length<>-1 then ''[''++''] (''+convert(varchar(30),isnull(t.prec,''''))+'')''when t.xusertype in (167) and t.length=-1 then ''[text]''when t.xusertype in (167) and t.length<>-1 then ''[''++''] (''+convert(varchar(30),isnull(t.prec,''''))+'')''when t.xusertype in (106,108) then ''[''++''] (''+convert(varchar(30),isnull(t.prec,''''))+'',''+convert(varchar(30),isnull(t.scale,''''))+'')''else ''[''++'']''END)+(case when t.isnullable=1 then '' null'' else '' not null ''end)+(case when COLUMNPROPERTY(t.ID, , ''ISIDENTITY'')=1 then '' identity'' else '''' end)+'',''+char(13)+char(10)from syscolumns t join systypes p on t.xusertype = p.xusertypewhere t.ID=OBJECT_ID('''+@TBNAME+''')ORDER BY t.COLID;'EXEc sp_executesql @sql_cmd,N'@table_script varchar(max) output',@sql_cmd outputset@table_script=@table_script+@sql_cmdIF len(@table_script)>0set@table_script=substring(@table_script,1,len(@table_script)-3)+char(13)+char(10)+')'+char(13)+char(10)+'GO'+char(13)+char(10)+char(13)+char(10)--------------------⽣成索引脚本---------------------------------------set@index_script=''set@sql_cmd=N'use '+@DBNAME+'declare @ct intdeclare @indid int --当前索引IDdeclare @p_indid int --前⼀个索引IDselect @indid=-1, @p_indid=0,@ct=0 --初始化,以后⽤@indid和@p_indid判断是否索引ID发⽣变化set @index_script=''''select @indid=INDID,@index_script=@index_script+(case when @indid<>@p_indid and @ct>0 then '')''+char(13)+char(10)+''go''+char(13)+char(10) else '''' end)+(case when @indid<>@p_indid and UNIQ=''PRIMARY KEY''then ''ALTER TABLE ''+TABNAME+'' ADD CONSTRAINT ''+name+'' PRIMARY KEY ''+cluster+char(13)+char(10)+''(''+char(13)+char(10)+''''+COLNAME+char(13)+char(10)when @indid<>@p_indid and UNIQ=''UNIQUE''then ''ALTER TABLE ''+TABNAME+'' ADD CONSTRAINT ''+name+'' UNIQUE ''+cluster+char(13)+char(10)+''(''+char(13)+char(10)+''''+COLNAME+char(13)+char(10)when @indid<>@p_indid and UNIQ=''INDEX''then ''CREATE ''+cluster+'' INDEX ''+name+'' ON ''+TABNAME+char(13)+char(10)+''(''+char(13)+char(10)+''''+COLNAME+char(13)+char(10)when @indid=@p_indidthen '' ,''+COLNAME+char(13)+char(10)END),@ct=@ct+1,@p_indid=@indidfrom(SELECT A.INDID,B.KEYNO,NAME,(SELECT NAME FROM SYSOBJECTS WHERE ID=A.ID) AS TABNAME,(SELECT NAME FROM SYSCOLUMNS WHERE ID=B.ID AND COLID=B.COLID) AS COLNAME,(CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME= AND XTYPE=''UQ'') THEN ''UNIQUE'' WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME= AND XTYPE=''PK'') THEN ''PRIMARY KEY'' ELSE ''INDEX'' END) AS UNIQ,(CASE WHEN A.INDID=1 THEN ''CLUSTERED'' WHEN A.INDID>1 THEN ''NONCLUSTERED'' END) AS CLUSTERFROM SYSINDEXES A INNER JOIN SYSINDEXKEYS B ON A.INDID=B.INDID AND A.ID=B.IDWHERE A.ID=OBJECT_ID('''+@TBNAME+''') and a.indid<>0) tORDER BY INDID,KEYNO'EXEc sp_executesql @sql_cmd,N'@index_script varchar(max) output',@sql_cmd outputset@index_script=@sql_cmdIF len(@index_script)>0set@index_script=@index_script+')'+char(13)+char(10)+'go'+char(13)+char(10)+char(13)+char(10)--⽣成默认值约束set@sql_cmd='use '+@DBNAME+'set @default_script=''''SELECT @default_script=@default_script+''ALTER TABLE ''+OBJECT_NAME(O.PARENT_OBJ)+'' ADD CONSTRAINT ''++'' default ''+t.text+'' for ''++char(13)+char(10)+''GO''+char(13)+char(10)FROM SYSOBJECTS O INNER JOIN SYSCOMMENTS T ON O.ID=T.IDINNER JOIN SYSCOLUMNS C ON O.PARENT_OBJ=C.ID AND C.CDEFAULT=T.IDWHERE O.XTYPE=''D'' AND O.PARENT_OBJ=OBJECT_ID('''+@TBNAME+''')'EXEc sp_executesql @sql_cmd,N'@default_script varchar(max) output',@sql_cmd outputset@default_script=@sql_cmd+char(13)+char(10)set@SQL=@table_script+@index_script+@default_scriptdeclare@len int,@n intset@len=LEN(@SQL)set@n=0while(@len>0)BEGINPRINT(substring(@SQL,@n*4000+1,4000));set@n=@n+1set@len=@len-4000;END。
步骤:1、新建作业,填写作业名称,所有者(所有者必须有访问数据库的权限),其余默认,切换至步骤选项卡;2、新建步骤,填写步骤名称以及执行脚本,填写完脚本最好能“分析”下脚本是否正确,确定,切换到计划选项卡。
备份代码(文件名:Test_时间.bak,路径:D:\\BACKUP\\):3、新建计划,计划名称:Plan。
设置频率和执行时间(由于是测试,我设置的是每5分钟执行一次,并且有到期日),确定。
4、测试你的Plan,并查看结果(右键-作业开始步骤,可查看结果)。
5、查看历史记录增量备份:backup database [YaDongWuLiu] to disk = 'D:/bak/YaDongWuLiu.bak';差异备份:DECLARE @strPath NVARCHAR(200)set @strPath = 'D:/bak/' + 'YaDongWuLiu'+ '.bak'BACKUP DATABASE [YaDongWuLiu] TO DISK = @strPath WITH DIFFERENTIAL ,NOUNLOAD , NOSKIP , STATS=10,NOFORMAT完整备份:DECLARE @strPath NVARCHAR(200)set @strPath = convert(NVARCHAR(19),getdate(),120)set @strPath = REPLACE(@strPath, ':' , '.')set @strPath = 'D:/bak/' + 'databasename'+@strPath +'.bak'BACKUP DATABASE [YaDongWuLiu] TO DISK = @strPath WITH NOINIT , NOUNLOAD ,NOSKIP , STATS = 10,NOFORMAT。
在SQL Server 中设置数据库备份作业通常使用SQL Server 代理(SQL Server Agent)。
下面是在SQL Server 中创建数据库备份作业的一般步骤:1. 启用SQL Server 代理:-在SQL Server Management Studio (SSMS) 中,连接到SQL Server 数据库引擎。
-在"对象资源管理器" 中,展开"SQL Server 代理" 节点,右键单击"SQL Server 代理",选择"启动"。
2. 创建备份作业:-在"SQL Server 代理" 下,右键单击"作业",选择"新建作业"。
3. 配置基本信息:-在"常规" 选项卡上,输入作业的名称和描述。
-选择"启用" 以激活作业。
4. 配置步骤(作业步骤):-在"步骤" 选项卡上,点击"新建"。
-输入步骤的名称。
-在"类型" 下拉菜单中选择"Transact-SQL 脚本(T-SQL)"。
-在"数据库" 下拉菜单中选择要备份的数据库。
5. 输入备份脚本:-在"命令" 文本框中输入备份数据库的T-SQL 脚本6. 配置调度(可选):-在"调度" 选项卡上,配置作业的调度计划。
你可以选择一次性运行或按照特定的调度计划定期运行作业。
7. 配置通知(可选):-在"通知" 选项卡上,可以配置在作业完成时是否发送通知。
8. 保存并运行作业:-点击"确定" 保存作业设置。
-如果需要立即执行作业,可以右键单击作业,选择"运行"。
SQL Server 作业计划介绍SQL Server 作业计划是 SQL Server 数据库管理系统中的一个重要功能,它允许用户自动执行一系列的任务。
这些任务可以包括备份数据库、优化查询、清理日志等等。
通过设置作业计划,用户可以在指定的时间间隔内自动执行这些任务,从而提高数据库管理的效率和可靠性。
在本文中,我们将深入探讨 SQL Server 作业计划的各个方面,包括作业计划的创建、调度、监控和管理等内容。
我们还将介绍一些常用的作业计划场景,并提供一些最佳实践和注意事项。
创建作业计划创建作业计划是使用 SQL Server 作业计划功能的第一步。
下面是创建作业计划的步骤:1.打开 SQL Server Management Studio(SSMS)并连接到目标 SQL Server实例。
2.在对象资源管理器中,展开“SQL Server 代理”节点,右键单击“作业”文件夹,选择“新建作业”。
3.在“常规”选项卡中,输入作业的名称和描述信息。
4.在“步骤”选项卡中,单击“新建”按钮,输入步骤的名称、类型和脚本等信息。
5.在“调度”选项卡中,配置作业的调度方式,包括执行频率、起始时间和结束时间等。
6.在“警报”选项卡中,配置作业的警报设置,以便在作业执行出现错误或警告时通知管理员。
7.单击“确定”按钮,保存作业计划。
调度作业计划调度作业计划是指设置作业计划在何时执行的过程。
SQL Server 作业计划提供了多种调度选项,包括一次性执行、按日执行、按周执行、按月执行等。
下面是一些常用的调度选项:•每天一次:作业计划每天在指定的时间点执行一次。
•每小时一次:作业计划每小时在指定的分钟执行一次。
•每周一次:作业计划每周在指定的日期和时间点执行一次。
•每月一次:作业计划每月在指定的日期和时间点执行一次。
通过合理设置调度选项,可以确保作业计划在适当的时间执行,从而避免对数据库和系统性能造成不必要的影响。
sqlserver使⽤SSMS运⾏sql脚本的六种⽅法
摘要:
下⽂讲述五种运⾏sql脚本的⽅法,如下所⽰:
实验环境:sql server 2008 R2
在⼀次会议讨论中,⼤家咨询我使⽤SSMS运⾏sql脚本的⽅法,下⽂我将依次举例讲述sql脚本的运⾏⽅法,如下所⽰:
1.选中待运⾏sql脚本,按快捷键"F5"
2.选中待运⾏sql脚本,点击右键,选中"执⾏"
3.选中待运⾏sql脚本,按⼯具栏中的运⾏图标
4.选中待运⾏sql脚本,依次点击"查询"-->"!执⾏"
5.选中待运⾏sql脚本,按快捷键"Ctrl+E"
6.选中待运⾏sql脚本,按快捷键"Alt+X"
总结
以上所述是⼩编给⼤家介绍的sqlserver 使⽤SSMS运⾏sql脚本的六种⽅法题,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!
如果你觉得本⽂对你有帮助,欢迎转载,烦请注明出处,谢谢!。
使⽤SQLCMD在SQLServer执⾏多个脚本概述:作为DBA,经常要⽤开发⼈员提供的SQL脚本来更新正式数据库,但是⼀个⽐较合理的开发流程,当提交脚本给DBA执⾏的时候,可能已经有⼏百个sql⽂件,并且有执⾏顺序,如我现在⼯作的公司,⼗⼏个客户,每个客户⼀个库,但是数据库结构、存储过程、视图等都是⼀模⼀样,每次执⾏脚本(以下称为升级),如果有⼀百个脚本,那么就要按顺序执⾏过千次,这种⼯作量可不是⼀个⼈能承受得了的。
解决⽅法:应对这种情况有以下⼏种⽅法:1、购买第三⽅软件(⼀般估计很少⼈买)2、⾃⼰编程⼀个⼩软件来执⾏,但是这个逻辑性要求⽐较⾼,⽽且编程的能⼒要有⼀定层次,这个我暂时没有。
3、使⽤本⽂介绍的⽅法,⾄于是啥,接着看:使⽤SQLCMD在SQLServer上执⾏多个脚本:SQLCMD:使⽤ sqlcmd 实⽤⼯具,可以在命令提⽰符处、在 SQLCMD 模式下的“查询编辑器”中、在 Windows 脚本⽂件中或者在SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤中输⼊ Transact-SQL 语句、系统过程和脚本⽂件。
此实⽤⼯具使⽤ ODBC 执⾏ Transact-SQL 批处理。
(来源于)详细语法可以到⽹上查找,这⾥就不贴出来。
SQLCMD有⼀个很重要的命令::r,记住,SQLCMD是⼤⼩写敏感的。
当:r发现正在运⾏SQL脚本,它会告诉SQLCMD把这个⽂件所引⽤的⽂件⼀并放⼊调⽤脚本中。
这将告诉你,停⽌⽬前的单个查询。
并重新调整查询,把应该关联的查询放到适当的位置。
另外,使⽤:r命令在⼀个批处理中执⾏多个脚本,使得你可以定义⼀个单独的变量集,⽤于包含所有脚本,但是不包含GO终结符。
从2005以后引⼊SQLCMD,可以⽤于将来替代osql⼯具。
如果你不熟悉SQLCMD,可以认为它是⼀个能从操作系统执⾏T-SQL命令和脚本的命令⾏⼯具。
下⾯例⼦中,创建5个作⽤在TestDB数据库上有关联的sql⽂件。
SqlServer代理作业最近⼀直在学习SqlServer 作业⽅⾯的知识,总结⼀下。
⼀:作业存在的库。
msdb use msdbMsdb数据库是代理服务数据库,为其报警、任务调度和记录操作员的操作提供存储空间。
⼆:查看作业分类EXEC msdb.dbo.sp_help_category;SELECT category_id ,--作业类别IDcategory_class ,--类别中项⽬类型:1=作业2=警报 3=操作员category_type ,--类别中类型:=本地、=多服务器、=⽆name --分类名称from msdb.dbo.syscategories三:作业常⽤的⼏个步骤:EXEC msdb.dbo.sp_delete_jobEXEC msdb.dbo.sp_add_jobEXEC msdb.dbo.sp_add_jobstepEXEC msdb..sp_add_jobscheduleEXEC msdb.dbo.sp_add_jobserverEXEC msdb.dbo.sp_start_job四:写⼀个简单的案例:begin transaction--申明变量declare @ReturnCode INT--赋值select @ReturnCode = 0--如果不包含if not exists (select * from msdb.dbo.syscategories where name=N'[Uncategorized (Local)]' and category_class=1)begin--添加作业分类exec @ReturnCode=msdb.dbo.sp_add_category @class=N'JOB',@type=N'LOCAL',@name=N'[Uncategorized (Local)]'--上⼀条语句是否有错 @ReturnCode 是否赋值 QuitWithRollback 回滚事务if (@@ERROR<>0 or @ReturnCode<>0) GOTO QuitWithRollbackenddeclare @jobId BINARY(16)--名字第⼀步 sp_add_jobEXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Proc_SyncBaseData',@enabled=1,@notify_level_eventlog=0,@notify_level_email=0,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'⽆描述。
使⽤SQL Server数据库⾃带的“⽣成SQL脚本”⼯具,可以⽣成创建表、视图、存储过程等的SQL脚本。
那么,能否将表中的数据也⽣成为SQL脚本,在查询分析器中执⾏这些脚本后⾃动将数据导⼊到SQL Server中呢?答案是肯定的,⽰例如下:CREATE PROCEDURE dbo.OutputData @tablename sysname AS declare @column varchar(1000) declare @columndata varchar(1000) declare @sql varchar(4000) declare @xtype tinyint declare @name sysname declare @objectId int declare @objectname sysname declare @ident int set nocount on set @objectId=object_id(@tablename) if @objectId is null -- 判断对象是否存在 begin print @tablename + '对象不存在' return end set @objectname=rtrim(object_name(@objectId)) if @objectname is null or charindex(@objectname,@tablename)=0 begin print @tablename + '对象不在当前数据库中' return end if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是表 begin print @tablename + '对象不是表' return end select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80 if @ident is not null print 'SET IDENTITY_INSERT '+ @TableName + ' ON' --定义游标,循环取数据并⽣成Insert语句 declare syscolumns_cursor cursor for select ,c.xtype from syscolumns c where c.id=@objectid order by c.colid --打开游标 open syscolumns_cursor set @column='' set @columndata='' fetch next from syscolumns_cursor into @name,@xtype while @@fetch_status <> -1 begin if @@fetch_status <> -2 begin if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理 begin set @column=@column + case when len(@column)=0 then '' else ',' end + @name set @columndata = @columndata + case when len(@columndata)=0 then '' else ','','',' when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier else @name end end end fetch next from syscolumns_cursor into @name,@xtype end close syscolumns_cursor deallocate syscolumns_cursor set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values(''as ''--'','+@columndata+','')'' from'+@tablename print '--'+@sql exec(@sql) if @ident is not null print 'SET IDENTITY_INSERT '+@TableName+' OFF' 调⽤时 exec OutputData 'myuser' 其中myUser中当前数据库中存在的表。
使⽤SMO程序化⽣成SQLServer表数据作为ETL的⼀部分,有时候就是需要把数据的Insert脚本⽣成出来,然后⼈⾁拷贝到另⼀个地⽅执⾏。
熟悉SMSS的同学们都知道,有个⽣成脚本的任务,可以⽣成数据库的create脚本啊什么的,其实也能够⽣产表中的数据。
⾃动化的ETL总不能连导出数据都⼈⾁。
⼀是容易出错,⼆是太low了。
C#控制台代码可以搞定这些,直接上代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using mon;using Microsoft.SqlServer.Management.Smo;using Microsoft.SqlServer.Management;using Microsoft.SqlServer.Management.Sdk.Sfc;namespace ConsoleApplication1{class Program{static void Main(string[] args){String todayDate = DateTime.Now.Day + "_" + DateTime.Now.Month + "_" + DateTime.Now.Year;String backupDirectory = "1a:\\DBBackup\\";String backupFileName = backupDirectory + todayDate + ".sql";if (File.Exists(backupFileName)){File.Delete(backupFileName);}StreamWriter sw = File.CreateText(backupFileName);Console.WriteLine(backupFileName);Console.ReadKey();Console.WriteLine("hello!");//Console.ReadLine();String dbName = "2oy"; // database nameServer srv = new Server("3lba1");// Reference the database.Database db = srv.Databases[dbName];// Define a Scripter object and set the required scripting options.Scripter scrp = new Scripter(srv);scrp.Options.ScriptSchema = false;scrp.Options.ScriptDrops = false;scrp.Options.WithDependencies = false;scrp.Options.Indexes = false; // To include indexesscrp.Options.DriAllConstraints = false; // to include referential constraints in the scriptscrp.Options.ScriptData = true; //Data include//Iterate through the tables in database and script each one.foreach (Table tb in db.Tables){if (!tb.IsSystemObject){foreach (string s in scrp.EnumScript(new Urn[] { tb.Urn })){sw.WriteLine(s);sw.Flush();}}}/** 此⽅法不能⽣成带数据的脚本,但是可以⽣成schema脚本foreach (Table tb in db.Tables){System.Collections.Specialized.StringCollection sc = scrp.Script(new Urn[]{tb.Urn}); foreach (string st in sc){Console.WriteLine(st);}Console.WriteLine("--");}*/}}}。
SQL2000中创建作业(定时查询,更新)2008-01-07 20:20企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输入作业名称--"步骤"项--新建--"步骤名"中输入步骤名--"类型"中选择"Transact-SQL 脚本(TSQL)"--"数据库"选择执行命令的数据库--"命令"中输入要执行的语句:update base set flag=0 where datediff(dd,date,getdate())=0--确定--"调度"项--新建调度--"名称"中输入调度名称--"调度类型"中选择你的作业执行安排--如果选择"反复出现"--点"更改"来设置你的时间安排为一天一次然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行设置方法:我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.============================在sql server中创建作业(转)如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL Server代理->作业来实现。
1、管理->SQL Server代理->作业(按鼠标右键)->新建作业->2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->描述[填写本次工作详细描述内容];[ 创建作业分类的步骤:SQL Server代理->作业->右键选所有任务->添加、修改、删除 ]3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->数据库[要操作的数据库]->命令[ 如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*.sql文件如果要执行存储过程,填exec p_procedure_namev_parameter1,[ v_parameter2…v_parameterN]]->确定(如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现->更改[调度时间表]->确定(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows 应用程序系统日志] ->确定。
使用脚本生成sqlserver作业的方法:
CREATE PROCEDURE JB_name -- 存储过程名称
AS
BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1 EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
-- —删除同名的警报(如果有的话)。
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs
WHERE (name = N' JB_name ')
IF (@JobID IS NOT NULL)
BEGIN
-- 检查此作业是否为多重服务器作业
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- 已经存在,因而终止脚本
RAISERROR (N'无法导入作业“JB_name”,因为已经有相同名称的多重服务器作业。
', 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 删除[本地]作业
EXECUTE msdb.dbo.sp_delete_job @job_name = N' JB_name '
SELECT @JobID = NULL
END
BEGIN
--—添加作业
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N' JB_name ', @owner_login_name = N'SERVER\Administrator', @description = N'没有可用的描述。
', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- —添加作业步骤
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'1', @command = N'exec JB_name ', @database_name = N'20140101', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- —添加作业调度
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'1', @enabled = 1, @freq_type = 8, @active_start_date = 20150316, @active_start_time = 80010, @freq_interval = 126, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 1, @active_end_date = 99991231, @active_end_time = 235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
-- —添加目标服务器
EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
--将以上复制到查询分析器运行即可。