自动创建SQL Server作业
发布时间:2020-12-12 16:25:57 所属栏目:MsSql教程 来源:网络整理
导读:我正在编写SQL Server部署脚本,它在特定的SQL Server服务器/实例上自动创建SQL Server作业.我发现我可以通过使用脚本作业as =来提取可以用于自动创建SQL Server作业的sql语句.创建到. 我的困惑是,我发现数据库名称和所有者帐户名称是在生成的sql脚本中硬编码
我正在编写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) 希望这会让你朝着正确的方向前进.如果您需要更多帮助,请告诉我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |