Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Reihenfolge der Ausführung von SQL Server-Anweisungen

Dies ist ein bekanntes "Feature" von SQL Server. Gehen Sie niemals davon aus, dass die WHERE-Klausel vor der SELECT-Klausel ausgeführt wird.

Siehe:SQL Server sollte keine unlogischen Fehler auslösen

Dafür gibt es manchmal gute Gründe. Erwägen Sie, zwei Tische zu verbinden, wobei A viel kleiner als B ist.

select CAST(A.col1 as int), A.col2, B.col3
from A join B ...
where ... isnumeric(A.col1) = 1

Wenn Sie den generierten Abfrageplan zu Recht oder zu Unrecht überprüfen, streamt der SQL-Server die Daten von A als führende Zeilen, um sie mit B zu verknüpfen. Dabei weiß er, dass er nur col2 abrufen muss und function on col1 . Es könnte col1 bringen nur um die Funktion später auszuführen, oder für etwas so Triviales wie CAST, kann SQL Server die Daten genauso gut während des Streaming-Prozesses umwandeln.

Eines ist sicher, diese Strategie macht SQL Server bei bestimmten Abfragen ein wenig schneller. Aber aus rein logischer Sicht würde ich es einen Fehler nennen.