Job - změna vlastníka

MSSQL

5. 11. 2019
EXEC msdb.dbo.spMeta_UpdateJobForNonAdmins
    @job_name = N'Jmeno_jobu',            -- zde zadat jmeno jobu
    @owner_login_name=N'DOMENA\username'  -- zde login noveho vlastnika
GO

Procedura

USE [msdb]

CREAT PROC [dbo].[spMeta_UpdateJobForNonAdmins]
      @job_id                       UNIQUEIDENTIFIER = NULL,
      @job_name                     sysname          = NULL,
      @new_name                     sysname          = NULL,
      @enabled                      TINYINT          = NULL,
      @description                  NVARCHAR(512)    = NULL,
      @start_step_id                INT              = NULL,
      @category_name                sysname          = NULL,
      @owner_login_name             sysname          = NULL,
      @notify_level_eventlog        INT              = NULL,
      @notify_level_email           INT              = NULL,
      @notify_level_netsend         INT              = NULL,
      @notify_level_page            INT              = NULL,
      @notify_email_operator_name   sysname          = NULL,
      @notify_netsend_operator_name sysname          = NULL,
      @notify_page_operator_name    sysname          = NULL,
      @delete_level                 INT              = NULL,
      @automatic_post               BIT              = 1
WITH EXECUTE AS OWNER
AS
BEGIN

    -- assign owner (or update) for job
   EXEC dbo.sp_update_job
      @job_id
      ,@job_name
      ,@new_name
      ,@enabled
      ,@description
      ,@start_step_id
      ,@category_name
      ,@owner_login_name
      ,@notify_level_eventlog
      ,@notify_level_email
      ,@notify_level_netsend
      ,@notify_level_page
      ,@notify_email_operator_name
      ,@notify_netsend_operator_name
      ,@notify_page_operator_name
      ,@delete_level
      ,@automatic_post


    -- assign owner for all schedule of job
    DECLARE @schedule_id BIGINT = 0
    -- Iterate over all schedule_ids
    WHILE (1 = 1)
    BEGIN

        -- Get next schedule_id
        SELECT TOP 1 @schedule_id = schedule_id
        FROM msdb.dbo.sysjobs S
            LEFT JOIN msdb.dbo.sysjobschedules SJ
                ON S.job_id = SJ.job_id
        WHERE S.name = @job_name
            AND schedule_id > @schedule_id
        ORDER BY schedule_id

        -- Exit loop if no more schedule_id available
        IF @@ROWCOUNT = 0 BREAK;

        PRINT @schedule_id

        EXEC sp_update_schedule @schedule_id = @schedule_id, @owner_login_name = @owner_login_name

    END
END