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

WHERE IN (SELECT NonExistingColumnName) verursacht unerwartetes Verhalten

Dies ist ein bekanntes Problem.

Die folgende Anweisung wird fälschlicherweise delete ALLE die Zeilen aus der Benutzertabelle:

DELETE FROM users WHERE user_id IN (SELECT user_id FROM groups);

auch wenn die Gruppentabelle keine Spalte mit dem Namen user_id hat.

Die folgende Anweisung wird jedoch einen Fehler auslösen:

DELETE FROM users WHERE user_id IN (SELECT g.user_id FROM groups g);

Msg 207, Level 16, State 1, Line 1
Invalid column name user_id

BEARBEITEN

DELETE TOP(1) FROM #Orders WHERE OrderID IN (SELECT OtherID FROM #LIST_TO_DELETE  )
 Invalid column name 'OtherID'

Dies löst einen Fehler aus, da OtherID existiert nicht in #Orders