如何在where子句中检查参数值以应用任意条件,如下所示(我们不想使用生成字符串脚本):
SELECT *
FROM Tbl1
WHERE
if (@Value1 > 0 && @Value2 > 0)
{
EXISTS (SELECT 1 FROM Tbl2
WHERE ColumnT >= @Value1 AND ColumnT <= @Value2 AND Tbl1.Id = Tbl2.Id)
}
else if (@Value1 > 0)
{
EXISTS (SELECT 1 FROM Tbl2
WHERE ColumnT >= @Value1 AND Tbl1.Id = Tbl2.Id)
}
else if (@Value2 > 0)
{
EXISTS (SELECT 1 FROM Tbl2
WHERE ColumnT <= Value2 AND Tbl1.Id = Tbl2.Id)}
}
答案 0 :(得分:1)
你不能像你想要的那样写它 - 但是你可以为WHERE
子句创建一个EXISTS()
条件,它应该做同样的事情,最终:
SELECT *
FROM Tbl1
WHERE
EXISTS (SELECT * FROM Tbl2
WHERE Tbl1.Id = Tbl2.Id
AND (ColumnT >= @Value1 OR @Value1 <= 0)
AND (ColumnT <= @Value2 OR @Value2 <= 0)
)
基本上,当@Value1
或@Value2
为&lt; = 0时,它不会与ColumnT
进行比较 - 所以这实际上应该与您指示的相同。
另外:我已使用SELECT
替换了“内部”EXISTS()
(tbl2
子句内)的表别名 - 外部都有tbl1
内部SELECT
,但指的是内部tbl2
中的SELECT
别名。我希望这就是你的意图。