В этом примере запрос (против плохо спроектированной базы данных о поставщиках):Перемещение IF EXISTS к ИНЕКЕ
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
Поскольку Selects и первые участки ИНЕКЕ идентичны, есть способ, чтобы безопасно совместить запросы , проверяя, что совпадения FullOrderNumber сначала проверяются? Я видел, что есть no guarantees for WHERE clause evaluation order.
'WHERE FullOrderNumber = @FullOrderNo OR OrderNumb er = @ OrderNo' –
@ M.Ali: Это приведет к возврату 'OrderNumber = @ OrderNo' ненужных записей, когда есть записи, где' FullOrderNumber = @ FullOrderNo' – Gerrat
@ M.Ali Я хочу только совместить номер OrderNumber, если нет совпадений FullOrderNumber в любом месте таблицы. – TrueWill