3
以下SQL Server作业总是退出,返回代码0表示成功,但事实上它并未执行其作业,即它不会删除“test.txt”。 如何捕获实际的退出代码(类似于%ERRORLEVEL%,或'许可被拒绝'的消息,或者任何有意义的响应,指示msdb.dbo.sp_add_jobstep上@command的成功或失败)?如何捕获CMDEXEC SQL Server作业的退出代码?
备注:
- {数据库名称}是数据库我
- {的proxyName}的所有者是SQL Server代理的代理的名称(即活跃于的名字在“操作系统(CmdExec)”属于映射到SQL Server中具有完全控制 Windows域登录凭据子系统){} folderUNC
- {} folderUNC是完整的UNC路径到哪里 “的test.txt” 是
的一些细节,可能是有用的文件夹:
- 服务器:Microsoft SQL Server企业版(64位)版本9.00 .4060.00
- OS:微软的Windows NT 5.2(3790)
- 我不是一个系统管理员,但只有数据库的所有者{}数据库名称
CODE:
USE {DBname}
GO
DECLARE @returnCode AS INT
DECLARE @jobName NVARCHAR(128)
DECLARE @jobStep1Name SYSNAME
SET @jobName = 'CMDEXEC Test Job'
SET @jobStep1Name = 'CMDEXEC Test Job Step 1'
EXEC @returnCode = msdb.dbo.sp_add_job
@job_name = @jobName,
@enabled = 1,
@start_step_id = 1,
@notify_level_eventlog = 2,
@delete_level = 0;
IF (@@ERROR <> 0 OR @returnCode <> 0)
PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) +
N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode
EXEC @returnCode = msdb.dbo.sp_add_jobstep
@job_name = @jobName,
@step_id = 1,
@step_name = @jobStep1Name,
@subsystem = 'CMDEXEC',
@command = 'DEL {folderUNC}\test.txt',
@cmdexec_success_code = 0,
@on_success_action = 1,
@on_fail_action = 2,
@proxy_name = '{proxyName}';
IF (@@ERROR <> 0 OR @returnCode <> 0)
PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) +
N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode
EXEC @returnCode = msdb.dbo.sp_add_jobserver
@job_name = @jobName;
IF (@@ERROR <> 0 OR @returnCode <> 0)
PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) +
N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode
EXEC @returnCode = msdb.dbo.sp_start_job
@job_name = @jobName,
@step_name = @jobStep1Name;
IF (@@ERROR <> 0 OR @returnCode <> 0)
PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) +
N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode
EXEC @returnCode = msdb.dbo.sp_delete_job
@job_name = @jobName;
IF (@@ERROR <> 0 OR @returnCode <> 0)
PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) +
N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode