sql server选择案例中的位置
请提供语法帮助,我只需要在参数=1时才需要where IN子句,否则需要所有记录 不起作用sql server选择案例中的位置,sql,case,where,Sql,Case,Where,请提供语法帮助,我只需要在参数=1时才需要where IN子句,否则需要所有记录 不起作用 SELECT * FROM T WHERE T.C = 'AAA' AND CASE WHEN @Param = 1 THEN T.ID IN ('1','2','3') END - this condition only needed when @param = 1 我尝试下面,但如何获得所有记录 AND T.ID IN CASE WHEN @Param = 1 THEN (
SELECT * FROM T
WHERE T.C = 'AAA'
AND CASE WHEN @Param = 1 THEN T.ID IN ('1','2','3') END - this condition only needed when @param = 1
我尝试下面,但如何获得所有记录
AND T.ID IN CASE WHEN @Param = 1 THEN ('1','2','3') ELSE -all rows- END
不要使用这个用例
按如下方式重写SQL:
WHERE
T.C = 'AAA'
AND (
(@Param = 1 AND T.ID IN ('1', '2', '3'))
OR
(@Param <> 1)
)
如果@Param与1没有区别,那么它必须是1,因此您不需要在另一个分支中显式地检查它
因此,最好的方法是:
WHERE
T.C = 'AAA'
AND (@Param <> 1 OR T.ID IN ('1', '2', '3'))
不要使用这个用例
按如下方式重写SQL:
WHERE
T.C = 'AAA'
AND (
(@Param = 1 AND T.ID IN ('1', '2', '3'))
OR
(@Param <> 1)
)
如果@Param与1没有区别,那么它必须是1,因此您不需要在另一个分支中显式地检查它
因此,最好的方法是:
WHERE
T.C = 'AAA'
AND (@Param <> 1 OR T.ID IN ('1', '2', '3'))
我不知道为什么人们会立即尝试使用SQL中的用例来实现这一点。1,2,3或@Param 1中的@Param=1和T.ID有什么问题?或者,如果@Param只能接受两个值,比如0或1,@Param=0或1,2,3中的T.ID?我不知道为什么人们会立即尝试在SQL中使用CASE来实现这一点。1,2,3或@Param 1中的@Param=1和T.ID有什么问题?或者,如果@Param只能接受两个值,比如0或1,@Param=0或1,2,3中的T.ID有什么问题?