当您创建 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
如果选中“在历史记录中包含步骤输出”复选框:
以下步骤:
将导致出现以下行
sysjobhistory
(cr/lf 由我添加):以下步骤:
结果出现以下行
sysjobhistory
,但没有结果集输出:如果您希望步骤输出可靠地结束在某个地方,而不管作业步骤的其余部分(或任何未来的更改),也请选择“记录到表”选项 - 在这种情况下,
sysjobstepslogs
即使输出被抑制,也会被捕获sysjobhistory
。 这两个相同的步骤将在列中产生以下内容log
。 步骤 1(无打印):第 2 步(打印):
只是要警惕你的输出量,因为
msdb
如果你不小心,这可能会爆炸。