次の2つのクエリがあります。最初のクエリは簡単で、@MyParam が null の場合に機能します。しかし、2 番目のクエリは同じ結果を返しません。2 番目のクエリの間違いは何ですか。
注:クライアントが「@MyParam IS NULL」チェック(クエリ1で使用)を取り除くように求めたため、2番目のアプローチを使用するように求められました
クエリ
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)