是否像 vb 一样进行“或”比较工作。我的意思是如果他检查每一个或者如果第一个是假的
喜欢
DECLARE @var1 bit;
SET @var1=1
DECLARE @var2 bit;
SET @var2=1
(@var1=1 or @var2=1)
AND ...
所以,@var 等于 1,我们不需要检查 var2,但是 sql server 会做检查吗?
它关于查询的优化(和服务器的内存)
保护你
是否像 vb 一样进行“或”比较工作。我的意思是如果他检查每一个或者如果第一个是假的
喜欢
DECLARE @var1 bit;
SET @var1=1
DECLARE @var2 bit;
SET @var2=1
(@var1=1 or @var2=1)
AND ...
所以,@var 等于 1,我们不需要检查 var2,但是 sql server 会做检查吗?
它关于查询的优化(和服务器的内存)
保护你
在大多数情况下,是的,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)
您可以在这里找到更深入的分析,作者 Gianluca Sartori:http ://www.sqlservercentral.com/articles/T-SQL/71950/
从微软连接:
感谢您的反馈意见。我们今天在 SQL Server 中支持的逻辑运算符是 ANSI SQL 标准中指定的,并且几乎每个数据库系统都支持这些逻辑运算符。我们不打算扩展它来支持更多非常规的逻辑运算符。如果要有条件地评估表达式,请在 SQL Server 中使用 CASE 表达式,例如:
where case when then (select 1 where ) when then (select 2 where ) ... end = 1
CASE 表达式保证按顺序计算 WHEN/THEN 子句。