让我们检查这两个语句:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Run Code Online (Sandbox Code Playgroud)
如果CONDITION 1
是TRUE
,会CONDITION 2
被检查吗?
如果CONDITION 3
是FALSE
,会CONDITION 4
被检查吗?
条件如何WHERE
:SQL Server 引擎是否优化WHERE
子句中的所有条件?程序员是否应该以正确的顺序放置条件以确保 SQL Server 优化器以正确的方式解析它?
添加:
感谢 Jack 提供链接,来自 t-sql 代码的惊喜:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的 SQL 语句(在从 2000 升级到 2008 R2 的 SQL Server 上执行):
SELECT TOP (1)
DocNox = CONVERT(integer, SUBSTRING(DocNo, 2, LEN(DocNo)-1)
FROM Tbl1
WHERE
Fld1 = 19
AND Fld2 = 1
AND Fld3 = 1
AND DocNo NOT LIKE '%-%'
ORDER BY
CONVERT(integer, SUBSTRING(DocNo, 2, LEN(DocNo)-1) DESC;
Run Code Online (Sandbox Code Playgroud)
示例数据(Serial 是一IDENTITY
列)
Serial DocNo Fld1 Fld2 Fld3
211 A1 19 1 1
212 A2 19 1 1
213 A003 19 1 1
214 X1-C1-1 20 1 1
Run Code Online (Sandbox Code Playgroud)
执行查询会产生以下错误消息:
Error converting nvarchar value …