SP_Start_job 失败,本地调用本地执行
SP_Start_job fails, on local call to local execute
我正在尝试设置一个循环,将同一份报告发送给多个经理,并更改参数以适合他们的团队。
我已经设置了一个订阅,我测试它成功触发,在我第一次尝试之前和我使用的代码循环之后(通过设置在 1 分钟内触发的时间表)
但是 SP_Start_job
无法启动作业,只是返回一个 1。每 5 次 运行 就会返回错误:
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 = 'Stephen.Wallace@email.org.uk'
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
显而易见的解决方案 - 我的错误
SP_Start_job 需要 Job_Name/id ,而不是订阅名称 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 =
和执行官
St_Start_job@Job_Name=@jobID
问题已解决。
感谢@Manoj 提供的代码。我看了很多遍才明白这一点。
我正在尝试设置一个循环,将同一份报告发送给多个经理,并更改参数以适合他们的团队。
我已经设置了一个订阅,我测试它成功触发,在我第一次尝试之前和我使用的代码循环之后(通过设置在 1 分钟内触发的时间表)
但是 SP_Start_job
无法启动作业,只是返回一个 1。每 5 次 运行 就会返回错误:
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 = 'Stephen.Wallace@email.org.uk'
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
显而易见的解决方案 - 我的错误
SP_Start_job 需要 Job_Name/id ,而不是订阅名称 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 =
和执行官 St_Start_job@Job_Name=@jobID
问题已解决。
感谢@Manoj 提供的代码。我看了很多遍才明白这一点。