IS NULL vs = NULL, где предложение + SQL Server

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

Пример:

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.

Как это можно достичь?

Ответ 1

select column1 from Table1
  where (@param is null and column2 is null)
     or (column2 = @param)

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

WHERE ((COLUMN1 = @PARAM) OR (COLUMN1 IS NULL AND @PARAM IS NULL))

Ответ 5

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 )  )