Sql 子查询返回了一个以上的作业值错误

Sql 子查询返回了一个以上的作业值错误,sql,reporting-services,Sql,Reporting Services,我创建了一个作业,在ssrs订阅因任何原因失败后执行 如果只发生一次订阅失败,则此作业可以正常工作。 上次我有三次失败。 作业:显示此错误: 消息512,16级,状态1,第5行 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 我曾尝试将=替换为IN,但没有成功,因此它可以替换多个值 DECLARE @ScheduleId NVARCHAR (50) SET @ScheduleId = ( SELECT rs.ScheduleID FROM

我创建了一个作业,在ssrs订阅因任何原因失败后执行

如果只发生一次订阅失败,则此作业可以正常工作。 上次我有三次失败。 作业:显示此错误:

消息512,16级,状态1,第5行 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

我曾尝试将=替换为IN,但没有成功,因此它可以替换多个值

DECLARE @ScheduleId NVARCHAR (50)
SET
  @ScheduleId = (
    SELECT
      rs.ScheduleID
    FROM
      ReportServer.dbo.Catalog c WITH(NOLOCK)
      INNER JOIN ReportServer.dbo.Subscriptions sub WITH(NOLOCK) ON (c.ItemID = (sub.Report_OID))
      INNER JOIN ReportServer.dbo.ReportSchedule rs WITH(NOLOCK) ON (
        c.ItemID = (rs.ReportID)
        AND sub.SubscriptionID IN (rs.SubscriptionID)
      )
      INNER JOIN ReportServer.dbo.Schedule sch WITH(NOLOCK) ON (rs.ScheduleID = (sch.ScheduleID))
      INNER JOIN msdb.dbo.sysjobs sj WITH(NOLOCK) ON (cast(rs.ScheduleID as sysname) = (sj.name)) --sysname equivalent to nvarchar(128)
      INNER JOIN msdb.dbo.sysjobschedules sjs WITH(NOLOCK) ON (sj.job_id = (sjs.job_id))
      INNER JOIN msdb.dbo.sysschedules ss WITH(NOLOCK) ON (sjs.schedule_id = (ss.schedule_id))
    WHERE
      (
        sub.LastStatus = 'Done: 1 processed of 1 total; 1 errors.'
        OR sub.LastStatus LIKE '%Failure%'
      )
  )
请您在这方面提供帮助,改用这个

DECLARE @ScheduleId NVARCHAR (50)
SET
  @ScheduleId = (
    SELECT
      TOP 1 rs.ScheduleID
    FROM
      ReportServer.dbo.Catalog c WITH(NOLOCK)
      INNER JOIN ReportServer.dbo.Subscriptions sub WITH(NOLOCK) ON (c.ItemID = (sub.Report_OID))
      INNER JOIN ReportServer.dbo.ReportSchedule rs WITH(NOLOCK) ON (
        c.ItemID = (rs.ReportID)
        AND sub.SubscriptionID IN (rs.SubscriptionID)
      )
      INNER JOIN ReportServer.dbo.Schedule sch WITH(NOLOCK) ON (rs.ScheduleID = (sch.ScheduleID))
      INNER JOIN msdb.dbo.sysjobs sj WITH(NOLOCK) ON (cast(rs.ScheduleID as sysname) = (sj.name)) --sysname equivalent to nvarchar(128)
      INNER JOIN msdb.dbo.sysjobschedules sjs WITH(NOLOCK) ON (sj.job_id = (sjs.job_id))
      INNER JOIN msdb.dbo.sysschedules ss WITH(NOLOCK) ON (sjs.schedule_id = (ss.schedule_id))
    WHERE
      (
        sub.LastStatus = 'Done: 1 processed of 1 total; 1 errors.'
        OR sub.LastStatus LIKE '%Failure%'
      )
  )

如果有多个时间表,您希望发生什么?您是只想返回一个,还是想修改查询以处理所有这些问题?作为旁白,您可能希望阅读以下内容: