Es ist aber offensichtlich, dass MS SQL Server Kurzschluss Theorie unterstützt, um die Leistung zu verbessern, indem sie unnötige Kontrolle zu vermeiden,
Unterstützung Beispiel:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
Hier wäre das erste Beispiel in die Irre führen " Fehler bei der Konvertierung, wenn der VARCHAR Wert ‚A‘ in dem Datentyp int umgewandelt wird.‘
Während die zweiten Läufe leicht als Bedingung 1 = 1 bis TRUE ausgewertet und damit die zweite Bedingung lief gar nicht.
Weiteres mehr
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
hier die erste Bedingung zu falsch bewerten würde und damit das DBMS für die zweite Bedingung gehen würde und sie wieder die Fehler der Umwandlung, wie in obigem Beispiel erhalten.
HINWEIS: Ich schrieb der irrigen ZUSTAND NUR WETTER Der Zustand ist EXECUTED oder kurzgeschlossen IF QUERY ERGEBNISSE IN Fehler ist die Bedingung ausgeführt, kurzgeschlossen SONST zu realisieren.
einfache Erklärung
Betrachten
WHERE 1 = 1 OR 2 = 2
als die erste Bedingung zu TRUE ausgewertet wird immer, sein sinnlosen die zweite Bedingung zu bewerten, da ihre Bewertung in welchem Wert das Ergebnis nicht beeinflussen würde überhaupt, so ist es die gute Gelegenheit für Sql Server, die Ausführungszeit der Abfrage zu sparen, indem unnötige Zustandsprüfungen oder -auswertungen übersprungen werden.
bei „OR“ wenn die erste Bedingung zu TRUE durch verbunden, die gesamte Kette ausgewertet wird „OR“ würde wahr ausgewertet betrachtet, ohne andere zu bewerten.
condition1 OR condition2 OR ..... OR conditionN
Wenn die Bedingung1 als wahr ausgewertet wird, ruhen Sie alle Bedingungen aus, bis BedingungN übersprungen wird. In verallgemeinerten Worten bei der Bestimmung der ersten TRUE würden alle anderen Bedingungen, die durch ODER verknüpft sind, übersprungen werden.
Betrachten wir die zweite Bedingung
WHERE 1 = 0 AND 1 = 1
als die erste Bedingung evalutated zu wird immer FALSCH seine sinnlos die zweite Bedingung zu bewerten, da ihre Bewertung in welchem Wert das Ergebnis nicht gar so wieder berühren würde, Es ist eine gute Gelegenheit für Sql Server, die Zeit für die Abfrageausführung zu speichern, indem unnötige Zustandsprüfungen oder -auswertungen übersprungen werden.
bei „AND“ wenn die erste Bedingung, die gesamte Kette mit dem „AND“ verbunden FALSCH ausgewertet würde, ohne die Bewertung anderer auf FALSCH als ausgewertet betrachtet.
condition1 AND condition2 AND ..... conditionN
wenn die condition1 zu FALSCH ausgewertet wird, ruhen alle Bedingungen bis conditionN würde übersprungen werden. In verallgemeinerten Worten bei der Bestimmung der ersten FALSE würden alle anderen Bedingungen, die durch UND verknüpft sind, übersprungen werden.
DAFüR, A WISE PROGRAMMIER sollte immer die Kette von Bedingungen in einem WEISE Programm, das, billigerer OR MOST Eliminieren CONDITION GETS zuerst ausgewertet, oder den Zustand IN DER WEISE ordnen, dass
maximalen Nutzen OF SHORT CIRCUIT nehmen
Danke und Grüße,
Rk_Hirpara
Es gibt keine Garantie ** ** auch immer, wie und welche Teile eines 'OR' Zustand zuerst ausgewertet werden (oder eine hoch). T-SQL ist ** NOT ** wie C# auf diese Weise. Sie ** können sich nicht auf boolesche Kurzschlüsse verlassen. –
'Warum? 1 = 1 und @ id = 'x' ist wahr '- es ist ** oder ** tatsächlich, nicht ** und **. –
In diesem INSERT @ tempTable (ID) -Werte (1) fehlt INTO. – vijay