SQL Server 2008-Abfrage-Editor ändert die Abfragelogik

8

Ich habe eine einfache SQL in SQL Server 2008 wie folgt codiert:

SELECT * FROM Tab1 WHERE A='1' AND (B='1' OR C='1');

Ich bin faul Ich habe diese Abfrage im Abfrage-Editor geöffnet, um die Syntax zu validieren, und habe im Dialogfeld OK gedrückt, ohne Änderungen vorzunehmen.

Ich habe festgestellt, dass der Abfrageeditor meine Abfrage in

geändert hat

SELECT * FROM Tab1 WHERE A='1' AND (B='1') OR (C='1');

Dies ändert offensichtlich die Logik des SQL und gibt verschiedene Ergebnisse zurück, abhängig davon, welche Sie ausführen.

Ich verwende routinemäßig den Abfrageeditor, um meine Syntax bei komplexen Abfragen zu überprüfen. Also ein bisschen besorgt, dass die subtile Veränderung wie diese nicht verschwinden würde, aber das Ergebnis verändern würde.

Ist das ein Feature des Designers? Kann ich etwas tun, um dieses Verhalten zu ändern?

BEARBEITEN: Danke, dass Sie darauf hingewiesen haben, dass die vom Editor vorgenommenen Änderungen nicht ganz die gleichen wie oben sind, aber die Abfrage trotzdem modifiziert wird, obwohl die Ergebnisse gleich sind.

Danke

    
Sivakanesh 28.06.2011, 15:06
quelle

2 Antworten

3

Ich habe versucht, dies im Query Designer zu replizieren und hatte ein etwas anderes Ergebnis. Ich tippte das gleiche wie Sie:

%Vor%

Und habe das:

%Vor%

Ich muss sagen, dass das Ergebnis dasselbe ist, aber wir können hier alle eine gefährliche Straße sehen. Außerdem mochte ich die (A = '1') Replikation nicht. Heck, ich möchte den Code, wie ich es codiert habe!

Ein Wort an die Weisen: Ich nie formatiere meine Abfragen in SQL Server Management Studio. Hast du gesehen, was es mit dem Code deiner Ansicht macht? Ich hasse es. Ich kodiere einfach woanders und füge SMS ein, wenn ich fertig bin.

    
Adrian Carneiro 28.06.2011, 15:34
quelle
2

Die Aussage

%Vor%

löst für mich Folgendes auf:

%Vor%

Dies ist überraschend korrekt , da in SQL Server-TSQL der Operator AND Vorrang vor OR hat. Das bedeutet, dass das obige wie folgt ist, weil der AND -Operator vor dem OR -Operator ausgewertet wird:

%Vor%

Und das ist das gleiche wie die ursprüngliche Aussage, die in der Frage verwendet wird.

Weitere Informationen finden Sie unter Operatorvorrang (Transact-SQL) .

    
MicSim 28.06.2011 15:17
quelle