SQL Server CASE внутри условия where не работает для значения NULL - PullRequest
3 голосов
/ 30 августа 2011

То, что я хочу, это когда @AddressCode равно нулю, тогда просто выполните

SELECT
    *
FROM
    Addresses
WHERE
    1= 1

Если @AddressCode не равно NULL, тогда выполните

SELECT
    *
FROM
    Addresses
WHERE
    1= 1 AND @AddressCode=Addresses.AddressCode

Как мне добиться этого ...Я попробовал запрос ниже, и он не работает для адреса со значением NULL или когда @AddressCode is NULL .... (Адреса - это просто воображаемое имя таблицы)

Declare @AddressCode varchar(20)
Set @AddressCode=NULL

SELECT
    *
FROM
    Addresses
WHERE
    1= 1
    AND
    CASE @AddressCode
        WHEN NULL
        THEN Addresses.AddressCode
        ELSE @AddressCode
    END =Addresses.AddressCode

Я пытался, но не смогсделать это ... Я знаю, что могу написать заявление IF и написать отдельное предложение выбора, но не хочу этого делать, так как у меня много таких критериев, как @AddressCode: (

Ответы [ 2 ]

11 голосов
/ 30 августа 2011
SELECT *
FROM
    Addresses
WHERE
    (@AddressCode IS NULL OR Addresses.AddressCode = @AddressCode)
4 голосов
/ 30 августа 2011

В этом случае вы используете CASE неправильно (по сравнению с нулем). Правильный путь -

CASE
  WHEN @AddressCode IS NULL THEN Addresses.AddressCode
  ELSE  @AddressCode
 END

Проблема с вашим запросом состоит в том, что CASE a WHEN b THEN c... проверяет, если a=b, который превращается в FALSE (NULL), если один из операндов равен нулю.
Другой вопрос, если вам действительно нужно CASE здесь ...

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