SQL Server中的AND和OR运算符

SQL Server中的AND和OR运算符,sql,sql-server,Sql,Sql Server,SQL Server中的和运算符是否等同于C#(或其他语言)中的&或& 也就是说,如果第一个条件被发现为false,它会检查第二个条件吗?否,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

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


也就是说,如果第一个条件被发现为false,它会检查第二个条件吗?

否,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和AND
可以写为:

where case
when NOT <EXPR1> then 0
when NOT <EXPR2> then 0
when NOT <EXPR3> then 0
else 1 end = 1
where case
when <EXPR1> then 1
when <EXPR2> then 1
when <EXPR3> then 1
else 0 end = 1
where case
当不是0时
当不是0时
当不是0时
否则1结束=1
任何形式的表达:

where <EXPR1> OR <EXPR2> OR <EXPR3>
where或
可以写为:

where case
when NOT <EXPR1> then 0
when NOT <EXPR2> then 0
when NOT <EXPR3> then 0
else 1 end = 1
where case
when <EXPR1> then 1
when <EXPR2> then 1
when <EXPR3> then 1
else 0 end = 1
where case
什么时候
什么时候
什么时候
否则0结束=1

对不起,我找不到任何文档请对您的查询进行解释。它将向您展示如何解析和执行查询,以及使用了哪些索引等。请查阅有关如何读取解释计划的文档。否,在SQL中,布尔表达式的求值顺序无法保证。不要依赖这种布尔“短路”,这在C#或其他语言中可能是正常的!对于一个伟大的例子“或其他语言”-一些语言定义布尔运算符的非短路变体和非短路变体,或仅定义非短路运算符。你不应该假设短路在所有其他语言中都是通用的。哪种语言性能更好?短路的一个(switch-case)或另一个(switch-case)?1)情况可能会阻止使用索引,因此,如果您有一个索引字段,您可以在该情况下进行查询,然后在该情况之外执行该操作。2) 对于非索引字段,大小写可以更快或更慢,具体取决于。例如,SQL Server的UDF成本为零,因此,如果您的WHERE具有UDF,那么如果您将它们移到案例末尾,通常可以加快速度。但并非总是如此!在性能调优中,始终进行测试。在我的sp中,此()谓词消耗45%的CPU。如果我使用
case
,我可以减少它吗?@SubinJacob它取决于数据和查询。测试一下。