SQL обнуляемый бит в предложении where - PullRequest
0 голосов
/ 08 августа 2011
create procedure [dbo].[MySproc]
@Value bit = null
as

select columna from tablea where columnb = @Value

Это не работает, если я передал значение null параметру. Очевидно, что когда я изменяю предикат на columnb, это ноль, это работает.

Что я могу сделать, чтобы заставить это работать без использования условной логики (если / еще)?

Обновление: я понял это на основе ответа @gbn

where (@Value is null and columnb is null) or (columnb = @Value)

1 Ответ

4 голосов
/ 08 августа 2011

Предполагая, что вы хотите true, если 1 = 1, 0 = 0 или NULL = NULL

select columna from tablea 
where columnb = @Value OR (columnb IS NULL AND @Value IS NULL)

Как насчет 0/1 в столбце, NULL в качестве параметра. Обычно это будет «просто дайте мне строки»

where columnb = ISNULL(@Value, columnb)

Ваша логика не имеет смысла, потому что вы используете NULL, чтобы что-то значить ...

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