【发布时间】:2013-08-14 10:34:46
【问题描述】:
我有以下两个问题。第一个查询是直截了当的,当 @MyParam 为空时,它作为 epecte 工作。但是第二个查询没有返回相同的结果。第二个查询中的错误是什么。
注意:我被要求使用第二种方法,因为客户要求摆脱“@MyParam IS NULL”检查(用于查询 1)
查询
DECLARE @MyParam INT
DECLARE @MyTable TABLE (EmpID INT)
INSERT INTO @MyTable VALUES (1)
INSERT INTO @MyTable VALUES (2)
INSERT INTO @MyTable VALUES (3)
INSERT INTO @MyTable VALUES (4)
--Query 1
SELECT *
FROM @MyTable M
WHERE M.EmpID = @MyParam OR @MyParam IS NULL
-- Query 2 (Rewrite for performance)
SELECT *
FROM @MyTable M
WHERE M.EmpID = (CASE @MyParam WHEN NULL THEN M.EmpID ELSE @MyParam END)
【问题讨论】:
标签: sql-server