我正在尝试强制sql server在某些字段上进行短路或比较。在Or的左侧我有一个简单的变量比较,在右侧我有一个非常“重”的子查询。
WHERE
(@Var = 'DefaultValue' ) OR
Exists(select * from atable)
如果第一个语句为false,有没有办法只执行or语句的右侧。
我已经尝试过case和if else语句,但找不到任何有效的语法。
我正在使用MS SQL服务器
答案 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