IS NULL vs = NULL в предложении where + SQL Server - PullRequest
17 голосов
/ 22 марта 2010

Как проверить значение IS NULL [or] = @param (где @param равно нулю)

Пример:

Select column1 from Table1
where column2 IS NULL => works fine

Если я хочу заменить сравниваемое значение (IS NULL) на @param.Как это можно сделать

Select column1 from Table1
where column2 = @param => this works fine until @param got some value in it and if is null never finds a record.

Как этого достичь?

Ответы [ 5 ]

37 голосов
/ 22 марта 2010
select column1 from Table1
  where (@param is null and column2 is null)
     or (column2 = @param)
5 голосов
/ 17 октября 2013

Я понимаю, что это старый вопрос, но у меня был тот же вопрос, и я предложил другой (более короткий) ответ. Примечание: это может работать только для MS SQL Server, который поддерживает ISNULL (expr, замена).

SELECT column1 FROM table1
WHERE ISNULL(column2,'') = ISNULL(@param,'')

Это также предполагает, что вы обрабатываете NULL и пустые строки одинаково.

2 голосов
/ 22 марта 2010

Для этого не существует подхода к запросу "один размер подходит всем", а то, как вы это делаете, имеет незначительные последствия для производительности. Если вы хотите выйти за за пределы , просто сделав запрос верным правильный ответ, независимо от того, насколько он медленный, посмотрите на эту статью на Условия динамического поиска в T-SQL, Эрланд Соммарског

здесь ссылка на часть в x = @x ИЛИ @x IS NULL

1 голос
/ 23 июня 2011
WHERE ((COLUMN1 = @PARAM) OR (COLUMN1 IS NULL AND @PARAM IS NULL))
0 голосов
/ 16 ноября 2011
Select column1 from Table1
where (column2 IS NULL and @param IS NULL) 
or ( column2 IS NOT NULL AND @param IS NOT NULL AND ( column2 = @param )  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...