SQL Server中的AND
运算符是否等同于C#(或其他语言)中的&&
或&
?
即如果发现第一个条件是假的,它会检查第二个条件吗?
答案 0 :(得分:2)
不,SQL中没有短路。例如:
SELECT a, b, c
From T t
WHERE is_numeric(c) = 1 AND cast(c as numeric(10,2)) > 100.00
这可能会生成无效的强制转换错误,其中c不是数字。
但是,您可以通过重写来强制它短路以使用CASE语句:
SELECT a, b, c
From T t
where
case
when is_numeric(c) = 0 then 0
when cast(c as numeric(10,2)) > 100.00 then 1
else 0
end = 1
一般情况下 ,但处理空值 除了表格的任何条款
where <EXPR1> AND <EXPR2> AND <EXP3>
可以写成:
where case
when NOT <EXPR1> then 0
when NOT <EXPR2> then 0
when NOT <EXPR3> then 0
else 1 end = 1
表格的任何表达:
where <EXPR1> OR <EXPR2> OR <EXPR3>
可以写成:
where case
when <EXPR1> then 1
when <EXPR2> then 1
when <EXPR3> then 1
else 0 end = 1