Но очевидно, что сервер 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 Server это хорошая возможность сэкономить время выполнения запроса, пропустив ненужную проверку или оценку условий .
в случае «ИЛИ», если первое условие оценивается как ИСТИНА, вся цепочка, соединенная «ИЛИ», будет считаться оцененной как истинное без оценки других.
condition1 OR condition2 OR ..... OR conditionN
если условие1 оценивается как истинное, оставьте все условия до тех пор, пока условиеN не будет пропущено. В общих словах при определении первого ИСТИНА все остальные условия, связанные оператором ИЛИ, будут пропущены.
Рассмотрим второе условие
WHERE 1 = 0 AND 1 = 1
поскольку первое условие оценивается как FALSE, бессмысленно оценивать второе условие, потому что его оценка в любом значении не повлияет на результат вообще, поэтому снова это хорошая возможность для Sql Server сэкономить время выполнения запроса, пропустив ненужную проверку или оценку условий .
в случае «И», если первое условие оценивается как ЛОЖЬ, вся цепочка, связанная с «И», будет считаться оцененной как ЛОЖЬ без оценки других.
condition1 AND condition2 AND ..... conditionN
если условие1 оценивается как ЛОЖЬ , оставьте все условия до тех пор, пока условиеN не будет пропущено. В общих словах при определении первого значения FALSE все остальные условия, связанные AND , будут пропущены.
ПОЭТОМУ РАЗУМНЫЙ ПРОГРАММАТОР ДОЛЖЕН ВСЕГДА ПРОГРАММИРОВАТЬ ЦЕПЬ УСЛОВИЙ ТАКИМ ОБРАЗОМ, ЧТОБЫ, МЕНЬШЕ ДОРОГОЕ ИЛИ НАИБОЛЕЕ ИСКЛЮЧАЮЩЕЕ УСЛОВИЕ ПЕРВОЕ ОЦЕНИВАЕТСЯ, ИЛИ СОЗДАТЬ СОСТОЯНИЕ ТАКИМ ОБРАЗОМ, ЧТО МОЖНО ИЗБЕЖАТЬ