SSRS подписка с курсором - PullRequest
0 голосов
/ 16 октября 2019

В моей (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 решена проблема Cannot read the next data row for the dataset

Но подписка возвращает только первый курсор-результат. Как я могу вернуть все строки разными буквами?

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Вместо выбора данных в вашем курсоре вставьте их в табличную переменную, которая затем будет накапливать результаты

Затем ВЫБЕРИТЕ все из табличной переменной, как только курсор закончит вставку.

В настоящий момент он будет возвращать результаты первого SELECT в SSRS, а затем по существу прекратит процедуру.

В качестве альтернативы, не могли бы вы просто выполнить этот SELECT непосредственно из #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
0 голосов
/ 16 октября 2019

Это единственный код, который у вас есть, потому что в SSRS код работает совсем не так, как TSQL. Это должно быть с учетом регистра, параметры, которые являются строковыми, могут работать по-другому. Убедитесь, что он установлен в SP с правильно заданными настройками ANSI, и снова запустите их

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...