2015-08-28 27 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的代码。我看了很多看起来很明显的东西。

相关问题