0
我想創建一個選擇語句,它將使用jobname創建作業並創建作業語句。從select語句中,我應該能夠選擇create語句,通過複製並粘貼到另一臺服務器上,可以稍後將其用於作業創建。如果有多個步驟可用多個步驟在SQL Server中的JOB腳本
我已經嘗試過使用以下腳本。
select @@SERVERNAME,sj.name, '
USE [msdb]
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=''[Uncategorized (Local)]'' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=JOB, @type=LOCAL, @name=''[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'''+sj.name+''',
@enabled='+convert(varchar(20),sj.enabled)+',
@notify_level_eventlog='+convert(varchar(20),sj.notify_level_eventlog)+',
@notify_level_email='+convert(varchar(20),sj.notify_level_email)+',
@notify_level_netsend='+convert(varchar(20),sj.notify_level_netsend)+',
@notify_level_page='+convert(varchar(50),sj.notify_level_page)+',
@delete_level='+convert(varchar(50),sj.delete_level)+',
@description=N'''+convert(varchar(50),sj.description)+''',
@category_name=''[Uncategorized (Local)]'',
@owner_login_name='''', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'''+convert(varchar(50),sjs.step_name)+''',
@step_id='+convert(varchar(50),sjs.step_id)+',
@cmdexec_success_code='+convert(varchar(50),sjs.cmdexec_success_code)+',
@on_success_action='+convert(varchar(50),sjs.on_success_action)+',
@on_success_step_id='+convert(varchar(50),sjs.on_success_step_id)+',
@on_fail_action='+convert(varchar(50),sjs.on_fail_action)+',
@on_fail_step_id='+convert(varchar(50),sjs.on_fail_step_id)+',
@retry_attempts='+convert(varchar(50),sjs.retry_attempts)+',
@retry_interval='+convert(varchar(50),sjs.retry_interval)+',
@os_run_priority='+convert(varchar(50),sjs.os_run_priority)+', @subsystem=N'''+convert(varchar(50),sjs.subsystem)+''',
@command=N'''+convert(varchar(50),sjs.command)+''',
@database_name=N'''+'master'+''',
@flags='+convert(varchar(50),sjs.flags)+'
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'''[email protected]@SERVERNAME+'''
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO'
from msdb.dbo.sysjobs sj inner join msdb.dbo.sysjobsteps sjs
ON sj.job_id=sjs.job_id
where subsystem='TSQL'
而且我成功地能夠創造一份工作。
現在我需要腳本,可以生成步驟以及多個步驟也包含在上面生成的腳本中。