【发布时间】:2014-12-19 20:54:31
【问题描述】:
在此示例查询中(针对设计不佳的供应商数据库):
DECLARE @OrderNo AS CHAR(8) = LEFT(@FullOrderNo,8)
IF EXISTS (SELECT 1 FROM Foo WHERE FullOrderNumber = @FullOrderNo)
SELECT Stuff
FROM Foo
WHERE X = 'Y'
AND FullOrderNumber = @FullOrderNo
ELSE
SELECT Stuff
FROM Foo
WHERE X = 'Y'
AND OrderNumber = @OrderNo
由于 SELECT 和 WHERE 子句的第一部分是相同的,有没有办法安全地组合查询同时确保首先检查 FullOrderNumber 匹配项?我看到有no guarantees for WHERE clause evaluation order。
【问题讨论】:
-
WHERE FullOrderNumber = @FullOrderNo OR OrderNumber = @OrderNo -
@M.Ali:当有
FullOrderNumber = @FullOrderNo的记录时,这将返回OrderNumber = @OrderNo不需要的记录 -
@M.Ali 如果在表中的任何地方都没有 FullOrderNumber 匹配项,我只想匹配 OrderNumber。
标签: sql sql-server performance query-optimization