Jest jednak oczywiste, że serwer MS Sql obsługuje teorię zwarć, aby poprawić wydajność, unikając niepotrzebnego sprawdzania,
Wspierający przykład:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
W tym przypadku pierwszy przykład spowodowałby błąd „Konwersja nie powiodła się podczas konwersji wartości varchar„ A ”na typ danych int.”
Podczas gdy drugi działa łatwo, ponieważ warunek 1 = 1 jest oceniany na PRAWDA, a zatem drugi warunek w ogóle nie działa.
Ponadto
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
tutaj pierwszy warunek zostanie uznany za fałszywy i dlatego DBMS przejdzie do drugiego warunku i ponownie otrzymasz błąd konwersji, jak w powyższym przykładzie.
UWAGA: NAPISŁEM BŁĘDNY WARUNEK TYLKO, ABY ZREALIZOWAĆ POGODĘ STAN JEST WYKONANY LUB ZWARCIE, JEŚLI ZAPYTANIE WYNIKA BŁĄD OZNACZA STAN WYKONANY, ZWARCIOWY W INNY SPOSÓB.
PROSTE WYJAŚNIENIE
Rozważać,
WHERE 1 = 1 OR 2 = 2
ponieważ pierwszy warunek jest oceniany jako PRAWDA , nie ma sensu oceniać drugiego warunku, ponieważ jego ocena w jakiejkolwiek wartości nie wpłynęłaby w ogóle na wynik, więc jest to dobra okazja dla Sql Server, aby zaoszczędzić czas wykonania zapytania, pomijając niepotrzebne sprawdzanie lub ocenę warunków .
w przypadku „LUB”, jeśli pierwszy warunek ma wartość PRAWDA, cały łańcuch połączony przez „LUB” zostałby uznany za oceniony jako prawdziwy bez oceny innych.
condition1 OR condition2 OR ..... OR conditionN
jeśli warunek warunek1 zostanie oszacowany jako prawdziwy, wszystkie warunki spocznij, aż warunekN zostanie pominięty. W uogólnionych słowach przy określaniu pierwszego PRAWDA wszystkie inne warunki połączone przez OR zostaną pominięte.
Rozważ drugi warunek
WHERE 1 = 0 AND 1 = 1
ponieważ pierwszy warunek jest oceniany na FAŁSZ oceniany nie ma sensu oceniać drugiego warunku, ponieważ jego ocena w jakiejkolwiek wartości nie wpłynęłaby w ogóle na wynik, więc ponownie jest to dobra okazja dla Sql Server, aby zaoszczędzić czas wykonania zapytania, pomijając niepotrzebne sprawdzanie lub ocenę stanu .
w przypadku „AND”, jeśli pierwszy warunek ma wartość FALSE, cały łańcuch połączony z „AND” zostałby uznany za oszacowany na FALSE bez oceny innych.
condition1 AND condition2 AND ..... conditionN
jeśli condition1 oceniana jest na FAŁSZ , reszta wszystkie warunki till conditionN będzie pominięty. W uogólnionych słowach przy określaniu pierwszego FAŁSZ , wszystkie inne warunki połączone operatorem AND zostaną pominięte.
Dlatego mądry programista powinien zawsze programować łańcuch warunków w taki sposób, aby mniej kosztowny lub najbardziej eliminujący warunek był oceniany w pierwszej kolejności, lub tak ustalał stan w taki sposób, który przynosiłby maksymalne korzyści