where子句+;SQL Server

where子句+;SQL Server,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何检查值是否为NULL[或]=@param(其中@param为NULL) 例: 如果我想用@param替换比较值(为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. 如何做到这一点?没有“一刀切”的查询方法,如何做到这一点会对性能产

如何检查值
是否为NULL[或]=@param
(其中@param为NULL)

例:

如果我想用@param替换比较值(为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.
如何做到这一点?

没有“一刀切”的查询方法,如何做到这一点会对性能产生微妙的影响。如果您不只是想让查询返回正确的答案,不管它有多慢,请阅读本文

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

这里有一个链接,指向

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


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

列=@PARAM
如果
@PARAM
为空,则永远不会为真,因此第二个条件(
@PARAM is NOT NULL
)是冗余的。@Damien\u不信者Jun您是对的,我删除了冗余代码。感谢
column2不为空
检查是不必要的,因为
column2=@param
将涵盖这一点。。。这使得这个答案比去年被接受的答案更加简洁。去年的答案是:(@param为null,column2为null)或(column2=@param)如果@param不为null,第一个条件将为false,第二个条件将只进行计算:(column2=@param)我发现如果你在检查以下内容(column2=@param)并且它可以为null,如果您将SQL更改为使用COALESCE而不是ISNULL,那么额外的检查更安全,因为前者是ISO/ANSI定义的,与后者不同,因此它不仅适用于SQL Server。
select column1 from Table1
  where (@param is null and column2 is null)
     or (column2 = @param)
WHERE ((COLUMN1 = @PARAM) OR (COLUMN1 IS NULL AND @PARAM IS NULL))
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 )  )
SELECT column1 FROM table1
WHERE ISNULL(column2,'') = ISNULL(@param,'')