запрос работает в ssms, но не в ssrs - PullRequest
0 голосов
/ 13 мая 2018

Таким образом, проблема, с которой я столкнулся, привела меня в замешательство.У меня есть набор данных, который использует запрос с 4 параметрами.Существуют обычные варианты выбора, которые пользователи могут выбирать для различных параметров, за исключением одного варианта, который называется «ВСЕ», который, если пользователь выбирает, выберет все.

Я запускаю отчет SSRS и по какой-то причине, когда по одному из параметров пользователь выбирает «ВСЕ», он не возвращает никаких записей, только пустую таблицу.Я пытаюсь воссоздать тот же запрос за набором данных в SSMS и ввести параметр «ALL» в том же параметре проблемы, и он возвращает все записи, которые я ожидал увидеть.

Запрос:

Declare @workingParam1 as varchar(200)
Declare @workingParam2 as varchar(50)
Declare @workingParam3 as varchar(50)
Declare @problemParam as varchar(50) -- this one is giving me problems only 
                                     -- if I choose ' ALL'


SELECT        Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9
FROM            View
WHERE        
(Col1 = @problemParam OR @problemParam = ' ALL') And 
(Col2 = @workingParam1 OR @workingParam1  = ' ALL') And
(Col3 = @workingParam2 OR @workingParam2 = ' ALL') And 
(Col4 = @workingParam3 OR @workingParam3 = ' ALL')
ORDER BY Col1, Col2, Col3

Спасибо!

1 Ответ

0 голосов
/ 13 мая 2018

Я полагаю, что в вашем отчете SSRS есть параметр множественного выбора. Когда вы выбираете ALL из раскрывающегося списка параметров в отчете ssrs, он не передает вашему запросу t-sql значение буквальной строки All, но передает все значения вашему t-sql в списке, разделенном запятыми, '1,2,3,4'.

Теперь вам нужно внести изменения в ваш код T-SQL, чтобы он мог обрабатывать параметры, передаваемые в виде списка с разделителями-запятыми.

Есть много вопросов по переполнению стека по этому вопросу.

В качестве альтернативы вы можете создать значение Select All, которое будет отображаться в раскрывающемся списке параметров, только тогда вы сможете использовать логику, использованную в текущем запросе, но даже тогда я буду использовать что-то вроде ...

WHERE (ColumnName = @Param OR @Param = 'All') 

Это даст желаемые результаты, но, опять же, если вы хотите повысить производительность своего кода t-sql, используйте хранимую процедуру для набора данных и используйте динамический sql для полной фильтрации предложения Where, если пользователь передает All параметр.

Много информации в этом коротком ответе и много гуглят для вас :)

...