SSRS, необходимо объявить скалярную переменную Ошибка Набор данных запроса - PullRequest
0 голосов
/ 20 февраля 2019

Я использую следующий запрос даже после объявления об ошибке получения параметра, могу выполнить на сервере SQL, но ошибка на SSRS, помогите мне.

declare @Fromdate date = '1/1/2018' ,@Todate date ='12/31/2018' ,@Date nvarchar(10) 
Begin
   set @Date = left(convert(VARCHAR,@Fromdate,112),6)

   while @Fromdate <= @Todate
   Begin 
     SET @Fromdate = (select REPLACE 
                             (LEFT(CONVERT(VARCHAR,DATEADD(MM,1,convert(date 
                      ,@Fromdate)),120),10),'-',''))
     if @Fromdate <= @Todate
     begin
        SET @Date  = left(convert(VARCHAR,@Fromdate,112),6)

        select @Date as Date
     END 
   END 
END

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Одна вещь, которую я видел ... (Кто-то с большим опытом в SSRS может знать, почему) - но - При настройке текста запроса в качестве набора данных, вам может понадобиться сначала сохранить объявления в тексте запроса и принятьзапрос в отчете, поэтому он создает поле набора данных ... Затем удалите объявления, чтобы параметры отчета могли использоваться текстом запроса.

Сначала создайте пустой отчет и добавьте два параметра: enter image description here

Во-вторых, создайте набор данных с текстом запроса: (с объявлениями) enter image description here

В-третьих, добавьте карты параметров в набор данных: enter image description here

ВЫ ДОЛЖНЫ СЕЙЧАС ВИДЕТЬ поле [dt] в наборе данных: enter image description here

В-четвертых, удалите объявления из текста запроса.Вам будет предложено определить параметры запроса.Хит ОК.Он скажет, что не может обновить список полей.Хит ОК снова.enter image description here

В-пятых, перейдите к мастеру таблиц (в разделе «Вставка» - «Таблица») и добавьте поле [dt] в раздел значений.enter image description here

Наконец, запустите отчет и введите даты и до: enter image description here

0 голосов
/ 20 февраля 2019

Попробуйте передать SSRS один набор результатов.Может быть, следующее будет работать.Следующее использует переменную таблицы для вставки ваших дат, а затем выбирает их в качестве результирующего набора.

declare 
   @Fromdate date = '1/1/2018' ,
   @Todate date ='12/31/2018' ,
   @Date nvarchar(10) 

Declare @tbl Table (dt nVarChar(10))

Begin
   while @Fromdate <= @Todate
   Begin 
     SET @Fromdate = (select REPLACE 
                             (LEFT(CONVERT(VARCHAR,DATEADD(MM,1,convert(date 
                      ,@Fromdate)),120),10),'-',''))
     if @Fromdate <= @Todate
     begin
        SET @Date  = left(convert(VARCHAR,@Fromdate,112),6)

        Insert Into @tbl Values (@Date)
     END 
   END 
END

Select * From @tbl

ОБНОВЛЕНИЕ: Немного исправлено.Я подтвердил, что это будет работать как набор данных SSRS:

Declare @Fromdate date = '1/1/2018' 
Declare @Todate date ='12/31/2018' 

Declare @tbl Table (dt nVarChar(10))

    Begin
       while @Fromdate <= @Todate
       Begin 
         SET @Fromdate = (select REPLACE 
                                 (LEFT(CONVERT(VARCHAR,DATEADD(MM,1,convert(date 
                          ,@Fromdate)),120),10),'-',''))
         if @Fromdate <= @Todate
         begin
            Insert Into @tbl Values (left(convert(VARCHAR,@Fromdate,112),6))
         END 
       END 
    END

    Select * From @tbl

SSRS: enter image description here

При использовании хранимой процедуры и параметров передачи в хранимый процесс: enter image description here

...