Выражение CASE работает на SQL сервере, но не работает в Visual Studio Reporting Services - PullRequest
0 голосов
/ 08 мая 2020

Есть оператор where:

WHERE (@obsolete=(case  when part.drawissno = 'OBS' then 'OBS' else 'NO' end) or @obsolete is null)
and ((CASE WHEN part.sm = 'MANUFACTURED' THEN mpfmain.mpflang END) = @country or @country IS NULL)

Параметры работают правильно на SQL сервере, но при добавлении в отчет все значения, кроме null, не работают. Параметр @ country имеет значения: GERMANY, SPAIN, FRANCE, ITALY. Параметр в отчете работает только тогда, когда пользователь должен сам ввести страну. Если в свойствах параметра записать доступные значения, они не работают. Остальные параметры, которые здесь не указаны, работают правильно, но не содержат CASE внутри себя. Может быть проблема в выражении CASE?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

case выражений просто затрудняют отслеживание предложений where и их оптимизацию. Обычно их можно переписать без case:

where (@obsolete is null or part.drawissno = @obsolete) and
      (@country is null or (part.sm = 'MANUFACTURED' and mpfmain.mpflang = @country))
0 голосов
/ 08 мая 2020

Я вижу две возможные проблемы со вторым выражением CASE:

1) Если mpfmain.mpflang имеет значение NULL, вы сравниваете с NULL со знаком равенства. Это не сработает, даже если @country также равно NULL.

2) Вам не хватает части ELSE. Это, конечно, не является обязательным, но подумайте, что произойдет, если либо part.sm имеет значение NULL, либо part.sm имеет значение, отличное от MANUFACTURED.

Вы можете извлечь выгоду из метода ISNULL для столбцов или параметров, чем это быть NULL. Вы можете узнать больше о методе ISNULL здесь:

https://docs.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql

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