Sql短路OR或条件存在于where子句中

时间:2012-11-30 13:15:17

标签: sql sql-server performance shortcut

我正在尝试强制sql server在某些字段上进行短路或比较。在Or的左侧我有一个简单的变量比较,在右侧我有一个非常“重”的子查询。

WHERE
(@Var = 'DefaultValue' )  OR 
Exists(select * from atable)

如果第一个语句为false,有没有办法只执行or语句的右侧。

我已经尝试过case和if else语句,但找不到任何有效的语法。

我正在使用MS SQL服务器

2 个答案:

答案 0 :(得分:3)

您无法在单个SQL语句中执行所需操作。但是你可以在存储过程中执行类似的操作

If @Var = 'DefaultValue' then
BEGIN
     SELECT * FROM table 
END
ELSE
BEGIN
     SELECT * FROM table
     WHERE Exists(select * from atable)
END

如果你有很多输入,你应该考虑动态SQL

答案 1 :(得分:0)

这个怎么样?

WHERE 1 = CASE @Var
               WHEN 'DefaultValue' THEN 1
               ELSE (SELECT TOP 1 1 FROM atable)
          END