Очевидно, що сервер MS Sql підтримує теорію короткого замикання, щоб покращити продуктивність, уникаючи зайвих перевірок,
Приклад підтримки:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
Тут перший приклад призведе до помилки "Перетворення не вдалося при перетворенні значення varchar" A "у тип даних int."
Хоча друга працює легко, оскільки умова 1 = 1 оцінюється як ІСТИНА, і, отже, друга умова взагалі не працює.
Далі більше
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
тут перша умова оцінюється як хибна, і, отже, СУБД піде на другу умову, і знову ви отримаєте помилку перетворення, як у наведеному вище прикладі.
ПРИМІТКА. Я ПІДПИСУВАТИ РЕШИМУ УМОВУ ДЛЯ РЕАЛІЗАЦІЇ ШЛЯХУ, ЩО ВСТАНОВЛЕННЯ ТА КОРОТКО ВИКОРИСТОВУЄТЬСЯ, ЯКЩО РЕЗУЛЬТАТИ ЗАПИТАННЯ В ПОМИЛКІ СЛОВА ВИКОРИСТОВУЄТЬСЯ, КРАТКО ОБСЛУГОВУЮТЬСЯ ДРУГОЮ.
ПРОСТЕ ПОЯСНЕННЯ
Подумайте,
WHERE 1 = 1 OR 2 = 2
як перша умова оцінюється як ІСТИНА , її безглуздо оцінювати другу умову, оскільки її оцінка в будь-якому значенні взагалі не вплине на результат, так що її хороша можливість для сервера Sql заощадити час виконання запиту, пропустивши перевірку непотрібних умов або оцінку .
у випадку "АБО", якщо перша умова оцінюється ІСТИНА, весь ланцюг, з'єднаний "АБО" , вважатиметься оціненим істинним без оцінки інших.
condition1 OR condition2 OR ..... OR conditionN
якщо умова1 оцінюється як істинна, всі умови, поки умоваN не буде пропущена Узагальнених словах при визначенні першої ПРАВИЛЬНОЇ , всі інші умови, пов'язані АБО, будуть пропущені.
Розглянемо другу умову
WHERE 1 = 0 AND 1 = 1
як перша умова стає evalutated в БРЕХНЯ його безглуздо оцінювати друга умова , оскільки його оцінка в будь-якому значенні , не впливає на результат на всіх, так що знову його хорошу можливість для Sql Server , щоб зберегти час виконання запитів, пропускаючи непотрібні перевірки стану або оцінки .
у випадку "AND", якщо перша умова оцінюється на FALSE, весь ланцюг, пов'язаний з "AND" , вважатиметься оціненим FALSE без оцінки інших.
condition1 AND condition2 AND ..... conditionN
якщо умова1 оцінено на ЛІЖНУ , залиште всі умови, поки умоваN не буде пропущена. Узагальнених словах при визначенні першого ЛЖУ , всі інші умови, пов'язані І , будуть пропущені.
НИХ, мудра програміст повинні ЗАВЖДИ ПРОГРАМА ЦЕПЬ УМОВ таким чином, що менш дорогий або більшість дискваліфікують УМОВИ отримує оцінку перші, або аранжують УМОВИ таким чином, який може приймати максимальну користь від короткого замикання