2015-08-28 25 views
0

我試圖建立一個循環,將相同的報告發送給多個管理員,並修改參數以適合他們的團隊。SP_Start_job失敗,本地調用本地執行

我有一個訂閱設置,我測試成功發射,這兩個我第一次嘗試,我採用了循環的代碼之前和之後(通過設置時間表在1分鐘火)

然而SP_Start_job啓動失敗的作業,然後簡單地返回1.每5個運行在reutrning錯誤:

Msg 14262, Level 16, State 1, Procedure sp_verify_job_identifiers, Line 41 The specified @job_id ('5274E5CB-9D5A-4998-96E4-B82017CA0588') does not exist.

DECLARE @MID VARCHAR(max), 
    @MEmail VARCHAR(max), 
    @UpdatedSettings VARCHAR(max), 
    @SubscriptionID VARCHAR(36), @passed int 

--Declares a cycle getting UID for manager and their EMAIL. 
--Email will be used to update the job destination 
SELECT @SubscriptionID = a.SubscriptionID 
FROM ReportServer$TOFINOREPORTING.dbo.[Subscriptions] a 
INNER JOIN ReportServer$TOFINOREPORTING.dbo.[Catalog] AS b ON a.[Report_OID] = b.[ItemID] 
WHERE b.NAME = 'Automation OperativePerformence' 
DECLARE ManagerCursor CURSOR STATIC 
FOR 
(
     SELECT U.ID AS ManagerID, 
      u.Email AS Email 
     FROM [dbo].[Global.User] U 
     INNER JOIN [dbo].[Global.UserRole] UR ON UR.UserId = U.ID 
     INNER JOIN [dbo].[Global.Role] R ON R.ID = UR.RoleID 
     WHERE R.NAME = 'ReportingAutomation' 
      AND U.IsActive = 1 
      AND U.Title LIKE 'Repairs Field Manager%' 
     ) 

OPEN ManagerCursor 

--UPDate cycle 
FETCH NEXT 
FROM managerCursor 
INTO @MID, 
    @MEMail 

SELECT @MID, 
    @MEmail 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    --TEST EMAIL OVERRIDE 
    SET @MEmail = '[email protected]' 

UPDATE dbo.BAT_SubscriptionController 
SET MID = @MID, 
    MEmail = @MEmail 

SELECT * 
FROM BAT_SubscriptionController 

    SELECT @UpdatedSettings = LEFT(Cast(a.extensionSettings AS NVARCHAR(max)), (- 1 + CHARINDEX('<Name>TO</Name><Value>', Cast(a.extensionSettings AS NVARCHAR(max))) + LEN(cast('<Name>TO</Name><Value>' AS NVARCHAR(max))) 
      )) + @MEmail + RIGHT(Cast(a.extensionSettings AS NVARCHAR(max)), len(Cast(a.extensionSettings AS VARCHAR(max))) - Charindex(
      '</Value></ParameterValue><ParameterValue><Name>IncludeReport</Name>', Cast(a.extensionSettings AS NVARCHAR(max))) + 1) 
FROM ReportServer$TOFINOREPORTING.dbo.[Subscriptions] a 
INNER JOIN ReportServer$TOFINOREPORTING.dbo.[Catalog] AS b ON a.[Report_OID] = b.[ItemID] 
WHERE a.SubscriptionID = @SubscriptionID 

SELECT @UpdatedSettings, 
    LEN(@UpdatedSettings), 
    @SubscriptionID 

UPDATE ReportServer$TOFINOREPORTING.dbo.[Subscriptions] 
SET extensionSettings = @UpdatedSettings 
WHERE SubscriptionID = @SubscriptionID 

EXEC @passed = msdb.dbo.sp_start_job @job_id = @SubscriptionID 

Select @passed 

WAITFOR DELAY '00:00:30' 

FETCH NEXT 
FROM managerCursor 
INTO @MID, 
    @MEMail 
END 

CLOSE ManagerCursor 

DEALLOCATE ManagerCursor 
+0

您可以在[SQL代理](https://youtu.be/nn2FB1P_Mn8?t=15) – lad2025

+0

上試試/ dev環境第5次執行代碼?或循環內的第5次迭代?由於您在循環外部選擇Job_ID(SubscriptionID),因此可能需要進行跟蹤/審計以查看是否有代碼繼續刪除作業。 –

+0

第5次迭代,在我的開發環境中沒有任何工作轉移。 –

回答

0

顯而易見的解決方案 - 我的錯誤

SP_Start_job需要Job_Name/id,而不是訂閱名稱標識。

更改我的訂閱ID階段使用

SELECT @SubscriptionID = a.SubscriptionID , @jobID= s.ScheduleID 
FROM ReportServer$TOFINOREPORTING.dbo.[Subscriptions] a 
INNER JOIN ReportServer$TOFINOREPORTING.dbo.[Catalog] AS b ON a.[Report_OID] = b.[ItemID] 
    INNER JOIN ReportServer$TOFINOREPORTING.dbo.ReportSchedule rs 
     ON rs.SubscriptionID = a.SubscriptionID 
    INNER JOIN ReportServer$TOFINOREPORTING.dbo.Schedule S 
     ON rs.ScheduleID = S.ScheduleID 
WHERE b.NAME = 

和exec來 St_Start_job @ JOB_NAME = @作業ID

解決了這個問題。

感謝@Manoj的代碼。我看了很多看起來很明顯的東西。

相關問題