自动创建SQL Server作业

前端之家收集整理的这篇文章主要介绍了自动创建SQL Server作业前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写sql Server部署脚本,它在特定的sql Server服务器/实例上自动创建sql Server作业.我发现我可以通过使用脚本作业as =>来提取可以用于自动创建sql Server作业的sql语句.创建到.

我的困惑是,我发现数据库名称和所有者帐户名称是在生成sql脚本中硬编码的.当我使用sqlcmd在另一台计算机上执行sql脚本来执行部署时,数据库名称和所有者帐户名称可能不同,所以我需要一种方法数据库名称和所有者帐户名称传递给sql Server作业创建脚本和让脚本使用提供的数据库名称和所有者帐户名称(硬编码的除外).

任何想法如何做到这一点?

解决方法

您需要动态创建作业脚本然后执行它.
您可以尝试类似以下内容或将其更改为存储过程,其中包含作业所有者和数据库名称的输入参数.
DECLARE @JobName VARCHAR(20)  --Job Name
DECLARE @Owner VARCHAR(200)   --Job Owner
DECLARE @DBName VARCHAR(200)  --Database Name
DECLARE @JobCode VARCHAR(4000) --Create Statement for Job
SET @JobName = 'Test2'
SET @Owner = 'BrianD'
SET @DBName = 'master'
SET @JobCode = 'USE msdb
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name 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)]''
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N''' + @JobName + ''',@enabled=1,@notify_level_eventlog=0,@notify_level_email=0,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N''No description available.'',@category_name=N''[Uncategorized (Local)]'',@owner_login_name=N''' + @Owner + ''',@job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId,@step_name=N''Version and Prod Level'',@step_id=1,@cmdexec_success_code=0,@on_success_action=1,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@retry_attempts=0,@retry_interval=0,@os_run_priority=0,@subsystem=N''Tsql'',@command=N''select SERVERPROPERTY(''''productversion''''),SERVERPROPERTY(''''productlevel'''')'',@database_name=N''' + @DBName + ''',@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId,@start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId,@server_name = N''(local)''
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO'
Exec (@JobCode)

希望这会让你朝着正确的方向前进.如果您需要更多帮助,请告诉我.

猜你在找的MsSQL相关文章