ODER Betreiber Kurzschluss in SQL Server
Ich möchte zu konsultieren, SQL-Server ODER Kurzschluss
Code:
DECLARE @tempTable table
(
id int
)
INSERT @tempTable(id) values(1)
DECLARE @id varchar(10)
SET @id = 'x'
SELECT * FROM @tempTable WHERE 1=1 OR id = @id --successfully
SELECT * FROM @tempTable WHERE @id = 'x' OR id = @id --Exception not Convert 'x' to int
Warum? 1=1 and @id='x' ist wahr.
SQL-Server-ODER-operator : ob der Kurzschluss-Funktion?
DANK
InformationsquelleAutor der Frage NotTwoWayStreet | 2012-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Innerhalb von SQL, es ist keine Voraussetzung,dass eine ODER-Klausel bricht früh. In anderen Worten, es ist bis zu der Optimierer, ob beide Bedingungen simutaneously. Ich bin kein Experte in der MSSQL-Optimierer, aber ich habe gesehen, Fälle, in denen der Optimierer hat und nicht kurzgeschlossen werden eine ODER-Klausel.
InformationsquelleAutor der Antwort Steven Mastandrea
Stolperte über diese Frage, und er hatte bereits gefunden, dieser blog-Eintrag: http://rusanu.com/2009/09/13/on-sql-server-boolean-operator-short-circuit/
Den SQL-server ist frei, um eine Abfrage zu optimieren, überall sieht es passt, also in dem gegebenen Beispiel in dem blog-post, verlassen Sie sich nicht auf Kurzschluss.
Jedoch ein FALL ist offenbar dokumentiert, um zu bewerten in der SCHRIFTLICHEN Bestellung - überprüfen Sie die Kommentare dieses blog-post.
InformationsquelleAutor der Antwort stolsvik
Es ist aber offensichtlich, dass MS Sql server unterstützt die Kurzschluss-Theorie, um die Leistung zu verbessern, durch die unnötige überprüfung,
Unterstützen Beispiel:
Hier das erste Beispiel würde das Ergebnis in Fehler 'Fehler bei der Konvertierung beim konvertieren den varchar-Wert 'A' in den int-Datentyp.'
Während die zweite läuft problemlos, da die Bedingung 1 = 1 WAHR ausgewertet und somit die zweite Bedingung nicht lief bei allen.
Weiter mehr
hier die erste Bedingung würde zu false ausgewertet und damit das DBMS würde für den zweiten Zustand und wieder wird der Fehler der Umwandlung, wie im obigen Beispiel.
HINWEIS: ICH SCHRIEB DEN FEHLERHAFTEN ZUSTAND, NUR ZU ERKENNEN, DAS WETTER DER BEDINGUNG AUSGEFÜHRT WIRD, ODER KURZGESCHLOSSEN
WENN DIE QUERY-ERGEBNISSE IN FEHLER BEDEUTET, DIE BEDINGUNG AUSGEFÜHRT, KURZGESCHLOSSEN SONST.
EINFACHE ERKLÄRUNG
Betrachten,
als die erste Bedingung wird immer ausgewertet, um WAHRseine sinnlos zu bewerten, die zweite Bedingung, weil Ihre Bewertung in was auch immer Wert
würde das Ergebnis nicht beeinflussen, also seine eine gute Gelegenheit für Sql Server zum speichern der Ausführung der Abfrage Zeit durch das überspringen unnötiger Zustand Kontrolle oder Auswertung.
im Falle von "ODER"wenn die erste Bedingung wird ausgewertet, um zu WAHR die gesamte Kette, verbunden durch "ODER" würde als wahr ausgewertet, ohne Bewertung der anderen.
wenn die bedingung1 wahr ausgewertet, rest alle Bedingungen bis conditionN würde übersprungen werden.
In Allgemeinen Worten, bei der Bestimmung der ersten WAHR, alle anderen Bedingungen verbunden ODER würde übersprungen werden.
Betrachten Sie die zweite Bedingung
als die erste Bedingung ist immer evalutated zu FALSE seine sinnlos zu bewerten, die zweite Bedingung, weil Ihre Bewertung in was auch immer Wert
würde das Ergebnis nicht beeinflussen, also wieder eine gute Gelegenheit für Sql Server zum speichern der Ausführung der Abfrage Zeit durch das überspringen unnötiger Zustand Kontrolle oder Auswertung.
im Falle von "UND"wenn die erste Bedingung wird ausgewertet, um zu FALSE die gesamte Kette verbunden mit der "UND" würde als evaluiert zu FALSE, ohne Bewertung der anderen.
wenn die bedingung1 ausgewertet, um FALSErest alle Bedingungen bis conditionN würde übersprungen werden.
In Allgemeinen Worten, bei der Bestimmung der ersten FALSE, alle anderen Bedingungen verknüpft UND würde übersprungen werden.
DAFÜR, EINE KLUGE PROGRAMMIERER SOLLTE IMMER PROGRAMM DIE KETTE DER BEDINGUNGEN IN EINER WEISE, DIE, WENIGER TEUER ODER DIE MEISTEN DIE BESEITIGUNG BEDINGUNG WIRD ZUERST AUSGEWERTET,
ODER VEREINBAREN SIE DEN ZUSTAND IN EINER SOLCHEN WEISE, DASS HÖCHSTENS PROFITIEREN VON KURZSCHLUSS
Dank und Grüße,
Rk_Hirpara
InformationsquelleAutor der Antwort RkHirpara