Sql 带游标的SSRS订阅

Sql 带游标的SSRS订阅,sql,sql-server,cursor,ssrs-2008-r2,subscription,Sql,Sql Server,Cursor,Ssrs 2008 R2,Subscription,在我的ssrs数据驱动订阅中,我尝试使用游标。 我需要的结果是:字母数应该等于光标返回的行数。例如: SET ANSI_WARNINGS ON DECLARE cur CURSOR FOR SELECT * FROM #ForResult OPEN cur WHILE 1 = 1 BEGIN FETCH NEXT FROM cur INTO @ID, @CommittedBy, @FlightNumber, @Dep, @DateBeg, @Carrier,

在我的ssrs数据驱动订阅中,我尝试使用游标。 我需要的结果是:字母数应该等于光标返回的行数。例如:

SET ANSI_WARNINGS ON 
DECLARE cur CURSOR FOR
SELECT * FROM #ForResult

OPEN cur
    WHILE 1 = 1
    BEGIN
        FETCH NEXT FROM cur INTO @ID, @CommittedBy, @FlightNumber, @Dep, @DateBeg, @Carrier, @Arr
        IF @@FETCH_STATUS <> 0 BREAK

        SELECT CONVERT(VARCHAR(10), @DateBeg, 104)      AS [DateBeg]
             , CONVERT(VARCHAR(10), @DateBeg, 104)      AS [DateEnd]
             , @Dep                                     AS [AP]
             , @FlightNumber                            AS [FlightNumber]
             , 'email@y.ru' AS [Recip]
             , 'Отчет ' 
             + @FlightNumber
             + ' от ' + CONVERT(VARCHAR(10), @DateBeg)
             + ' а/к ' + @Carrier
             + ' ' + @Dep + ' - ' + @Arr 
             + ' // ' + @CommittedBy                    AS [Subject]        
    END
CLOSE cur
DEALLOCATE cur
SET ANSI_WARNINGS OFF
SET ANSI_WARNINGS已解决问题无法读取数据集的下一个数据行


但订阅只返回第一个游标结果。如何以不同的字母返回所有行?

这是您仅有的代码,因为在SSRS中,代码的工作方式与TSQL非常不同。它应该区分大小写,字符串参数可能会有不同的工作方式。确保在SP中正确定义了所有ANSI设置,并再次运行这些设置,而不是在光标中选择数据,将其插入表变量,然后将结果累加

然后,在光标完成插入后,从表变量中选择所有内容

目前,它将把第一次选择的结果返回给SSRS,然后基本上放弃该程序

或者,您可以不直接从ForResult执行选择吗?例如:

SELECT
    CONVERT(VARCHAR(10), DateBeg, 104)      AS [DateBeg]
    , CONVERT(VARCHAR(10), DateBeg, 104)    AS [DateEnd]
    , Dep                                   AS [AP]
    , FlightNumber                          AS [FlightNumber]
    , 'emaily.ru' AS [Recip]
    , 'Отчет ' 
    + FlightNumber
    + ' от ' + CONVERT(VARCHAR(10), DateBeg)
    + ' а/к ' + Carrier
    + ' ' + Dep + ' - ' + Arr 
    + ' // ' + CommittedBy                  AS [Subject]
FROM #ForResult

设置ANSI_警告-解决了问题,但我只收到一个字母