OR @MyParam IS NULL チェックを回避するために、次の 2 つのクエリを書き直す必要があります (「CASE が正しく機能していない」で説明されているように、CASE ステートメントを使用して)
次のクエリをその形式で書き直すことは可能ですか?
注: fn_Split 関数は、ストアド プロシージャ SQL Server 2008 で `IN` 演算子を使用して文字列パラメーターを渡す方法で使用できます。
DECLARE @MyParam VARCHAR(MAX)
SET @MyParam = '2,3'
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 IN (SELECT CONVERT(int,Value) FROM fn_Split(@MyParam, ','))
OR @MyParam IS NULL
)
--Query 2
SELECT *
FROM @MyTable M
WHERE (EXISTS (
SELECT CONVERT(int,Value)
FROM fn_Split(@MyParam, ',')
WHERE CONVERT(int,Value) = M.EmpID
)
OR @MyParam IS NULL
)