Предложение T-SQL WHERE - сравнение столбца с самим собой завершается неудачно для пустых столбцов - PullRequest
0 голосов
/ 12 ноября 2010

Обычно я использую такую ​​конструкцию для применения фильтров к столбцам:

CREATE TABLE test(a int NOT NULL, b int NULL)
--insert some data
INSERT INTO test(a,b) values (1,1)
INSERT INTO test(a,b) values (1,NULL)

declare @a int
declare @b int
set @a = 1
--@b is null at this time

select * from test
  where a = @a
    and b = isnull(@b,b)

Выбирает только первый ряд.

Например, если это была хранимая процедура, а аргумент @b был нулевым, я мог бы указать его значение, чтобы «включить» его в предложении where, и указать значение NULL, чтобы выбрать, где b = b что будет истинно для каждого столбца, НО , если в столбце b есть значение NULL, оно не будет выбрано. Есть ли стандартный способ справиться с этим? Так что я должен использовать в приведенном выше примере запроса, чтобы выбрать все строки, даже если столбец b имеет нулевые значения?

1 Ответ

2 голосов
/ 12 ноября 2010

Для проверки значений NULL необходимо сделать это как b is null

Вы можете изменить запрос как -

select * from test
  where a = @a
    and b = isnull(@b,b)
    or (@b is null and b is null)
...