在where子句+ SQL Server中IS NULL vs = NULL

时间:2010-03-22 05:11:31

标签: sql sql-server tsql

如何检查值IS NULL [or] = @param(其中@param为空)

例如:

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

如果我想用@param替换比较值(IS NULL)。怎么做呢

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 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:5)

我意识到这是一个古老的问题,但我有同样的问题,并想出了另一个(更短的)答案。 注意:这可能仅适用于支持ISNULL(expr,替换)的MS SQL Server。

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

这也假设您以相同的方式处理NULL和空字符串。

答案 2 :(得分:2)

对此没有“一刀切”的查询方法,在执行此操作时会产生微妙的性能影响。如果你想超越只是让查询返回正确答案,无论它有多慢,请查看Dynamic Search Conditions in T-SQLby Erland Sommarskog上的这篇文章

这是指向x = @x OR @x IS NULL

部分的链接

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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