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



如何检查 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)}
    }
你不能

像你试图的那样写它 - 但你可以为你的EXISTS()子句创建一个WHERE条件,最终应该做同样的事情:

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 为 <= 0 时,它不会与 ColumnT 进行比较 - 所以这确实应该与您指示的相同。

另外:我用 tbl2 替换了"内部"SELECT(在 EXISTS() 子句内(的表别名 - 您tbl1了外部和内部SELECT,但指的是内部SELECT中的tbl2别名。我希望这就是你的意图。

最新更新