0

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

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

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

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

我正在使用 MS SQL 服务器

4

2 回答 2

3

你不能在一条 SQL 语句中做你想做的事。但是,您可以在存储过程中执行类似的操作

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

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

于 2012-11-30T13:19:31.263 回答
0

这个怎么样?

WHERE 1 = CASE @Var
               WHEN 'DefaultValue' THEN 1
               ELSE (SELECT TOP 1 1 FROM atable)
          END
于 2014-10-04T03:38:12.590 回答