Ich habe heute beim Ausführen des Skripts eines Kollegen die obige Meldung 'ANSI-Warnung' gesehen (und ich weiß nicht, welche der vielen Anweisungen dazu geführt hat, dass die Warnung angezeigt wurde).
In der Vergangenheit habe ich es ignoriert: Ich vermeide Nullen selbst und alles, was sie beseitigen würde, ist eine gute Sache in meinem Buch! Aber heute hat mich das Wort 'SET' buchstäblich angeschrien und mir wurde klar, dass ich nicht weiß, was das Wort in diesem Zusammenhang bedeuten soll.
Mein erster Gedanke, basierend auf der Tatsache, dass es sich um Großbuchstaben handelt, ist, dass es sich um das SETSchlüsselwort handelt und wie in "Zuweisung" bedeutet
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
Laut der SQL Server-Hilfe basiert die Funktion "ANSI-Warnungen" auf ISO / ANSI SQL-92. In der Spezifikation wird der Begriff "Set-Operation" in einem Unterabschnittstitel nur einmal verwendet, also in der Groß- und Kleinschreibung in der Datenzuweisungsabschnitt. Nach einem kurzen Durchsuchen der Fehlermeldung werden jedoch Beispiele angezeigt, SELECTbei denen es sich anscheinend um Abfragen ohne Zuordnung handelt.
Mein zweiter Gedanke, basierend auf dem Wortlaut der SQL Server-Warnung, war, dass die mathematische Bedeutung von set impliziert ist. Ich glaube jedoch nicht, dass die Aggregation in SQL streng genommen eine festgelegte Operation ist. Sogar wenn das SQL Server-Team es für eine festgelegte Operation hält, welchen Zweck hat es, das Wort "set" in Großbuchstaben zu schreiben?
Beim Googeln ist mir eine SQL Server-Fehlermeldung aufgefallen:
Table 'T' does not have the identity property. Cannot perform SET operation.
Die gleichen Worte "SET-Operation" können hier im selben Fall nur auf die Zuweisung der IDENTITY_INSERTEigenschaft verweisen , was mich zu meinem ersten Gedanken zurückbringt.
Kann jemand Licht in die Sache bringen?
SETist immer in Großbuchstaben wie ein Schlüsselwort
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'gibt 3 weitere Ergebnisse an, die alle ebenfalls auf ein SETKeyword hinweisen .
set operationsauf UNIONund INTERSECTund gefunden EXCEPT, aber unter NULLdiesen Umständen kann ich den Fehler nicht finden . Ich denke, dass es eine alte Fehlermeldung sein kann.