我有一个在任何地方都找不到的问题。这是一个奇怪的场景。
想象:
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中这样做吗?
答案 0 :(得分:4)
你可以这样做:
SELECT * FROM tbl WHERE (@P IS NULL OR ID = @P);
答案 1 :(得分:0)
如果你的Where子句中有很多东西,那么另一个可能更具可读性的场景
SELECT *
FROM tbl
WHERE ID = Coalesce(@P, ID)