我正在尝试强制 sql server 在某些字段上进行短路或比较。在 Or 的左侧,我有一个简单的变量比较,而在右侧,我有一个非常“重”的子查询。
WHERE
(@Var = 'DefaultValue' ) OR
Exists(select * from atable)
如果第一条语句为假,有没有办法只执行 or 语句的右侧。
我已经尝试过 case 和 if else 语句,但找不到任何有效的语法。
我正在使用 MS SQL 服务器
我正在尝试强制 sql server 在某些字段上进行短路或比较。在 Or 的左侧,我有一个简单的变量比较,而在右侧,我有一个非常“重”的子查询。
WHERE
(@Var = 'DefaultValue' ) OR
Exists(select * from atable)
如果第一条语句为假,有没有办法只执行 or 语句的右侧。
我已经尝试过 case 和 if else 语句,但找不到任何有效的语法。
我正在使用 MS SQL 服务器
你不能在一条 SQL 语句中做你想做的事。但是,您可以在存储过程中执行类似的操作
If @Var = 'DefaultValue' then
BEGIN
SELECT * FROM table
END
ELSE
BEGIN
SELECT * FROM table
WHERE Exists(select * from atable)
END
如果你有很多输入,你应该考虑动态 SQL
这个怎么样?
WHERE 1 = CASE @Var
WHEN 'DefaultValue' THEN 1
ELSE (SELECT TOP 1 1 FROM atable)
END