“OR”比较运算符在中文中的工作方式类似于VB。也就是说,如果第一个条件为真,那么后面的条件就不再被检查。
例如:
DECLARE @var1 bit;
SET @var1=1
DECLARE @var2 bit;
SET @var2=1
(@var1=1 or @var2=1)
AND ...
所以,@var等于1,我们不需要检查var2,但是SQL Server会进行检查吗?
这是关于查询优化(以及服务器内存)的问题。
谢谢。
“OR”比较运算符在中文中的工作方式类似于VB。也就是说,如果第一个条件为真,那么后面的条件就不再被检查。
例如:
DECLARE @var1 bit;
SET @var1=1
DECLARE @var2 bit;
SET @var2=1
(@var1=1 or @var2=1)
AND ...
大多数情况下,是的,SQL Server确实对AND和OR语句使用短路计算,但有时操作的顺序并不如您所期望的那样发生。可以通过以下方式轻松测试:
SELECT '"Divide By Zero" error' AS [test] WHERE (1 / 0 = 1)
SELECT 'NO "Divide By Zero" error' AS [test] WHERE (1 = 1) OR (1 / 0 = 1)
感谢您的反馈。我们在SQL Server中支持的逻辑运算符是ANSI SQL标准中指定并被几乎所有数据库系统支持的运算符。我们不打算扩展它以支持更不寻常的逻辑运算符。如果您想有条件地评估表达式,则可以在SQL Server中使用CASE表达式,例如:
where case when then (select 1 where ) when then (select 2 where ) ... end = 1
CASE表达式保证了WHEN / THEN子句按顺序进行评估。
Or
实际上 不 是短路运算,将会评估两个条件。与 VB 中的OrElse
进行比较。唯一情况下短路运算(或没有)真正 对语义有影响是当条件允许副作用,包括异常时,这是另一个问题:“SQL Server 允许在条件中有副作用吗?” - user166390