在此示例查詢(針對設計拙劣的供應商數據庫):移動IF EXISTS WHERE子句
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
由於選擇並在WHERE子句的第一部分是相同的,是有辦法來安全地結合查詢,同時確保首先檢查FullOrderNumber匹配?我看到有no guarantees for WHERE clause evaluation order。
'WHERE FullOrderNumber = @FullOrderNo OR OrderNumb er = @ OrderNo' –
@ M.Ali:當存在'FullOrderNumber = @ FullOrderNo'的記錄時,將返回'OrderNumber = @ OrderNo'不需要的記錄 – Gerrat
@ M.Ali我只想在OrderNumber上匹配,如果沒有匹配表中任何地方的FullOrderNumber。 – TrueWill