T-SQL。 WHERE 子句中使用 IN 运算符的 CASE 表达式
T-SQL. CASE expression in WHERE clause using IN operator
如果用户把 800 作为 @WorkShop
它应该 return 所有记录有 800 车间 ID 和 900 车间 ID。
如果用户将任何其他 ID 作为 @WorkShop
传递,它应该 return 只记录选择的 @WorkShop
ID。
我试过以下方法:
SELECT *
FROM Test
WHERE Workshop IN (
CASE
WHEN @WorkShop = N'800' THEN N'900' AND N'800'
ELSE @WorkShop
END
)
这 return 是一个错误:
Incorrect syntax near the keyword 'and'.
所以总而言之,如果用户将 800 作为 @WorkShop
参数传递,它应该 return 类似于:
Workshop IN ('800', '900')
这是你想要的吗?
SELECT *
FROM Test
WHERE ( @WorkShop = '800' AND Workshop IN('800', '900') )
OR @WorkShop = Workshop
试试这个:
SELECT *
FROM Test
WHERE (@WorkShop = '800' AND (Workshop = '800' or Workshop = '900'))
OR @WorkShop = Workshop
另一种方法
SELECT *
FROM Test
WHERE Workshop IN ( @WorkShop, CASE
WHEN @WorkShop = N'800' THEN N'900'
END )
如果用户把 800 作为 @WorkShop
它应该 return 所有记录有 800 车间 ID 和 900 车间 ID。
如果用户将任何其他 ID 作为 @WorkShop
传递,它应该 return 只记录选择的 @WorkShop
ID。
我试过以下方法:
SELECT *
FROM Test
WHERE Workshop IN (
CASE
WHEN @WorkShop = N'800' THEN N'900' AND N'800'
ELSE @WorkShop
END
)
这 return 是一个错误:
Incorrect syntax near the keyword 'and'.
所以总而言之,如果用户将 800 作为 @WorkShop
参数传递,它应该 return 类似于:
Workshop IN ('800', '900')
这是你想要的吗?
SELECT *
FROM Test
WHERE ( @WorkShop = '800' AND Workshop IN('800', '900') )
OR @WorkShop = Workshop
试试这个:
SELECT *
FROM Test
WHERE (@WorkShop = '800' AND (Workshop = '800' or Workshop = '900'))
OR @WorkShop = Workshop
另一种方法
SELECT *
FROM Test
WHERE Workshop IN ( @WorkShop, CASE
WHEN @WorkShop = N'800' THEN N'900'
END )