Heim >Datenbank >MySQL-Tutorial >Warum lässt SQL Server 2008 Management Studio zu, dass eine Löschabfrage mit einem ungültigen Spaltenverweis in einer korrelierten Unterabfrage erfolgreich ausgeführt wird?
Verhalten der SQL Server 2008 Management Studio-Syntaxprüfung
In SQL Server 2008 Management Studio wurde ein unerwartetes Verhalten beim Ausführen einer Abfrage beobachtet, die einen ungültigen Spaltenverweis enthielt. Die Abfrage lautet:
<code class="language-sql">delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)</code>
Obwohl „hs_id“ kein gültiger Spaltenname in der Tabelle „HotelSupplier“ ist (der korrekte Spaltenname ist „hs_key“), wird die Abfrage erfolgreich ausgeführt und löscht alle Zeilen in der Tabelle „Photo“. Dies wirft die Frage auf: Sollte die Abfrage aufgrund von Syntaxproblemen fehlschlagen?
Die Antwort liegt im Konzept korrelierter Unterabfragen. Die „DELETE“-Anweisung ist mit einer Unterabfrage verknüpft, was bedeutet, dass die „hs_id“-Referenz in der Unterabfrage in die Spalte „hs_id“ in der äußeren Abfrage („Foto“) aufgelöst wird.
Dies ist ein gültiges Verhalten und ermöglicht Abfragen, auf Spalten in der übergeordneten Tabelle zu verweisen, ohne den Tabellennamen explizit anzugeben. In diesem Fall entspricht das Ergebnis:
<code class="language-sql">delete from Photo where Photo.hs_id in (select Photo.hs_id from HotelSupplier where id = 142)</code>
Das Muster der äußeren Abfrage wird an die Unterabfrage weitergegeben, auch wenn die Unterabfrage selbst keine Spalten explizit projiziert.
Daher gilt es als normales Verhalten von SQL Server, dass solche „syntaxwidrigen“ Abfragen erfolgreich sind und unqualifizierte Spaltenverweise in der Unterabfrage mit der äußeren Abfrage korrelieren.
Das obige ist der detaillierte Inhalt vonWarum lässt SQL Server 2008 Management Studio zu, dass eine Löschabfrage mit einem ungültigen Spaltenverweis in einer korrelierten Unterabfrage erfolgreich ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!