CASE无法正常工作

LCJ*_*LCJ 0 sql-server

我有两个问题.第一个查询是直接的,当@MyParam为null时,它可以作为epecte使用.但第二个查询没有返回相同的结果.第二个查询中的错误是什么.

注意:我被要求使用第二种方法,因为客户端要求摆脱"@MyParam IS NULL"检查(在查询1中使用)

QUERY

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)
Run Code Online (Sandbox Code Playgroud)

pod*_*ska 5

你可以写

SELECT * 
FROM @MyTable M
WHERE M.EmpID = IsNULL(@MyParam,M.EmpID)
Run Code Online (Sandbox Code Playgroud)

或者,如果您case因某些其他原因需要使用

WHERE M.EmpID = (CASE WHEN @MyParam IS NULL THEN M.EmpID ELSE @MyParam END)
Run Code Online (Sandbox Code Playgroud)

案件工作正常.选择没有打破.http://pragmatictips.com/26