Обычно я использую такую конструкцию для применения фильтров к столбцам:
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
имеет нулевые значения?