“在历史记录中包含步骤输出”-TSQL 步骤的 SQL Server 代理中的设置控制是什么?

问题描述 投票:0回答:1

当您创建TSQL作业步骤时,有一个名为:“在历史记录中包含步骤输出”的高级设置,但我不明白该设置控制什么:

Step setting

作业脚本示例:

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

无论是否选中,我都无法让步骤输出显示在作业历史记录中:

Job history

请注意,我有一个 CMD 命令,它会输出到历史记录中。

那么,这个设置似乎无法控制 TSQL 作业步骤的任何内容,或者此输出是否在其他地方输出?

请注意,我对“记录到表”/“附加输出”设置没有任何问题,它们控制

sysjobstepslogs
输出。

注意 #2,所有步骤输出都会添加到

sysjobhistory
,无论是否设置此标志,因此似乎也不是这样。

sql-server sql-server-agent
1个回答
0
投票

经过一些协作和实验,我们确定该复选框将在

sysjobhistory
中显示结果集输出 - 只要在同一步骤中不执行其他影响输出的语句,例如
PRINT
RAISERROR

如果选中“在历史记录中包含步骤输出”框:

  1. 以下步骤:

     SELECT foo = 'step 1';
    

    将导致

    sysjobhistory
    中的下一行(cr/lf 由我添加):

     Executed as user: <whoever>. 
     foo
     ------
     step 1
     (1 rows(s) affected).  
     The step succeeded.
    
  2. 以下步骤:

     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
抑制。

© www.soinside.com 2019 - 2024. All rights reserved.