Я обычно использую такую конструкцию для применения фильтров к столбцам:
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, что было бы истинным для каждого столбца, < strong>НО если в столбце b
есть значение NULL
, оно не будет выбрано. Есть ли стандартный способ справиться с этим? Итак, что я должен использовать в приведенном выше примере запроса, чтобы выбрать все строки, даже если столбец b
имеет нулевые значения?