Sql-Server-2012

是否可以查詢作業計劃描述?

  • November 27, 2019

正在整理一個腳本來分析所有活動的作業,我幾乎擁有我需要的一切,但如果可能的話,我也希望能夠查詢時間表描述。這可能嗎?我可以從中查詢名稱和 ID,msdb.dbo.sysschedules但它似乎沒有時間表描述。我在哪裡可以找到這些資訊?

您可以通過呼叫另一個系統過程來使用sp_help_jobschedulewhich 返回.schedule_description``sp_get_schedule_description

exec sp_help_jobschedule @job_name = 'Your Job Name', @include_description = 1

在游標中滾動它可能會更快,而不是分解那個系統過程

描述實際上不是儲存在數據庫中的值。它是從 dbo.sysschedules 中的值動態派生的。根據 scsimon 的回答,您可以使用 sp_help_jobschedule,或者只在游標中使用 sp_help_schedule 來獲取描述。

像這樣的東西。

   CREATE TABLE #tmp
(schedule_id            INT IDENTITY(1, 1) NOT NULL,
schedule_uid           UNIQUEIDENTIFIER NOT NULL,
schedule_name          SYSNAME NOT NULL,
enabled                INT NOT NULL,
freq_type              INT NOT NULL,
freq_interval          INT NOT NULL,
freq_subday_type       INT NOT NULL,
freq_subday_interval   INT NOT NULL,
freq_relative_interval INT NOT NULL,
freq_recurrence_factor INT NOT NULL,
active_start_date      INT NOT NULL,
active_end_date        INT NOT NULL,
active_start_time      INT NOT NULL,
active_end_time        INT NOT NULL,
date_created           DATETIME NOT NULL,
schedule_description   NVARCHAR(100) NOT NULL,
job_count              NVARCHAR(1) NOT NULL
);

DECLARE @id INT;

DECLARE c_sched CURSOR LOCAL
FOR SELECT schedule_id
   FROM msdb.dbo.sysschedules;

OPEN c_sched;

WHILE 1 = 1
   BEGIN
       FETCH NEXT FROM c_sched INTO @id;

       INSERT INTO #tmp
       (schedule_id,
        schedule_uid,
        schedule_name,
        enabled,
        freq_type,
        freq_interval,
        freq_subday_type,
        freq_subday_interval,
        freq_relative_interval,
        freq_recurrence_factor,
        active_start_date,
        active_end_date,
        active_start_time,
        active_end_time,
        date_created,
        schedule_description,
        job_count
       )
       EXEC msdb.dbo.sp_help_schedule @schedule_id = @id,
                                      @include_description = 1;

       IF @@FETCH_STATUS < 0
           BREAK;

   END;

CLOSE c_sched;

DEALLOCATE c_sched;

SELECT *
FROM #tmp;

引用自:https://dba.stackexchange.com/questions/254272