SQL Server中的AND和OR运算符

时间:2014-03-27 06:10:53

标签: sql sql-server

SQL Server中的AND运算符是否等同于C#(或其他语言)中的&&&

即如果发现第一个条件是假的,它会检查第二个条件吗?

1 个答案:

答案 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