检查where子句中的参数值以应用任意条件

时间:2017-11-11 08:17:54

标签: sql-server

如何在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)}
    }

1 个答案:

答案 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别名。我希望这就是你的意图。