当您创建TSQL作业步骤时,有一个名为:“在历史记录中包含步骤输出”的高级设置,但我不明白该设置控制什么:
作业脚本示例:
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.sp_add_job @job_name=N'SampleJob',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=2,
@notify_level_page=2,
@delete_level=0,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'', @job_id = @jobId OUTPUT
EXEC msdb.dbo.sp_add_jobstep @job_name=N'SampleJob', @step_name=N'Include step in history',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_fail_action=2,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'print ''Include step in history''',
@database_name=N'master',
@flags=4
EXEC msdb.dbo.sp_add_jobserver @job_name=N'SampleJob', @server_name = null
无论是否选中,我都无法让步骤输出显示在作业历史记录中:
请注意,我有一个 CMD 命令,它会输出到历史记录中。
那么,这个设置似乎无法控制 TSQL 作业步骤的任何内容,或者此输出是否在其他地方输出?
请注意,我对“记录到表”/“附加输出”设置没有任何问题,它们控制
sysjobstepslogs
输出。
注意 #2,所有步骤输出都会添加到
sysjobhistory
,无论是否设置此标志,因此似乎也不是这样。
经过一些协作和实验,我们确定该复选框将在
sysjobhistory
中显示结果集输出 - 只要在同一步骤中不执行其他影响输出的语句,例如 PRINT
或 RAISERROR
。
如果选中“在历史记录中包含步骤输出”框:
以下步骤:
SELECT foo = 'step 1';
将导致
sysjobhistory
中的下一行(cr/lf 由我添加):
Executed as user: <whoever>.
foo
------
step 1
(1 rows(s) affected).
The step succeeded.
以下步骤:
SELECT foo = 'step 2';
PRINT 'this is the second step';
结果在
sysjobhistory
中的下一行,没有结果集输出:
Executed as user: <whoever>.
this is the second step [SQLSTATE 01000] (Message 0).
The step succeeded.
如果您希望步骤输出可靠地,无论作业步骤的其余部分(或任何未来的更改)如何,也请选择“记录到表”选项 - 在这种情况下,输出将被捕获在
sysjobstepslogs
中如果它被 sysjobhistory
抑制。