WHERE IF语句ALL SQL Server

时间:2018-02-20 16:49:19

标签: sql-server where

我有一个在任何地方都找不到的问题。这是一个奇怪的场景。

想象:

DECLARE @P INT
SET @P = 5
SELECT * FROM tbl WHERE ID = @P --THIS WILL SELECT 1 ROW. 

但如果@P为空,我不希望它这样做。

现在可以做到

 IF @P IS NULL BEGIN
     SELECT * FROM tbl
 ELSE
     SELECT * FROM tbl WHERE ID = @P
 END 

但是当你有一个非常大的选择脚本50行时,你不想重复它两次。

做这样的事情会很容易。

SELECT * 
FROM tbl 
WHERE ID IN ISNULL(@P, *)   -- if "*" returns everything

你能在SQL Server中这样做吗?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

SELECT * FROM tbl WHERE (@P IS NULL OR ID = @P);

答案 1 :(得分:0)

如果你的Where子句中有很多东西,那么另一个可能更具可读性的场景

SELECT * 
FROM tbl 
WHERE ID = Coalesce(@P, ID)