我需要重写以下两个查询以避免 OR @MyParam IS NULL 检查(通过使用 CASE 中提到的 CASE 语句无法正常工作)
是否可以以这种格式重写以下查询?
注意:在存储过程 SQL Server 2008 中如何使用 `IN` 运算符传递字符串参数中提供了 fn_Split 函数
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
)