0

次の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)
4

5 に答える 5