Ho visto il messaggio "ANSI warning" sopra riportato oggi mentre eseguivo lo script di un collega (e non so quale delle tante affermazioni abbia causato la visualizzazione dell'avviso).
In passato l'ho ignorato: evito me stesso i null e quindi tutto ciò che li eliminerebbe è una buona cosa nel mio libro! Tuttavia, oggi la parola "SET" mi ha letteralmente urlato addosso e mi sono reso conto che non so quale sia il significato della parola in questo contesto.
Il mio primo pensiero, basato sul fatto che è in maiuscolo, è che si riferisce alla SETparola chiave e significa "assegnazione", come in
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
Secondo la Guida di SQL Server, la funzione "Avvertenze ANSI" si basa su ISO / ANSI SQL-92, la specifica per la quale fa un solo uso del termine "Imposta operazione" in un titolo di sottosezione, quindi nel caso del titolo, nella sezione di assegnazione dei dati. Tuttavia, dopo una rapida ricerca su Google del messaggio di errore, vedo esempi che sono SELECTquery senza apparentemente implicazioni.
Il mio secondo pensiero, basato sulla formulazione dell'avvertimento di SQL Server, era che il significato matematico di set è implicito. Tuttavia, non penso che l'aggregazione in SQL stia parlando strettamente un'operazione impostata. Anche se il team di SQL Server lo considera un'operazione set, qual è lo scopo di mettere la parola "set" in maiuscolo?
Durante la ricerca su Google ho notato un messaggio di errore di SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
Le stesse parole "operazione SET" nello stesso caso qui possono riferirsi solo all'assegnazione della IDENTITY_INSERTproprietà, il che mi riporta al mio primo pensiero.
Qualcuno può far luce sulla questione?
SETsia sempre pieno di maiuscole come una parola chiave
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'fornisce altri 3 risultati che sembrano indicare anche SETparole chiave.
set operationsriferimento UNIONe INTERSECTe EXCEPT, ma non riesco a trovare l'errore NULLin nessuna di queste circostanze. Penso che potrebbe essere un messaggio di errore legacy.