Hoje, vi a mensagem 'aviso ANSI' acima ao executar o script de um colega (e não sei qual das muitas declarações fez com que o aviso fosse mostrado).
No passado, eu o ignorei: evito anular a mim mesmo e, portanto, qualquer coisa que os elimine é uma coisa boa no meu livro! No entanto, hoje a palavra 'SET' literalmente gritou comigo e percebi que não sabia qual o significado da palavra nesse contexto.
Meu primeiro pensamento, baseado no fato de estar em maiúscula, é que ele está se referindo à SETpalavra - chave e significa 'atribuição', como em
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
De acordo com a Ajuda do SQL Server, o recurso 'avisos ANSI' baseia-se na ISO / ANSI SQL-92, cuja especificação utiliza apenas o termo 'operação Set' em um título de subseção, portanto, em maiúsculas e minúsculas. seção de atribuição de dados. No entanto, depois de pesquisar rapidamente a mensagem de erro, vejo exemplos que são SELECTconsultas com aparentemente nenhuma atribuição envolvida.
Meu segundo pensamento, com base na redação do aviso do SQL Server, foi que o significado matemático de conjunto está implícito. No entanto, não acho que a agregação no SQL seja estritamente uma operação definida. Mesmo que a equipe do SQL Server considere uma operação definida, qual é o objetivo de colocar a palavra 'conjunto' em maiúsculas?
Ao pesquisar no Google, observei uma mensagem de erro do SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
As mesmas palavras 'operação SET' no mesmo caso aqui só podem se referir à atribuição da IDENTITY_INSERTpropriedade, o que me traz de volta ao meu primeiro pensamento.
Alguém pode lançar alguma luz sobre o assunto?
SETsempre em maiúsculas completos como uma palavra-chave
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'fornece três outros resultados que parecem também indicar SETpalavras-chave.
set operationsreferindo- UNIONe INTERSECTe EXCEPT, mas eu não posso obter o erro de chegar a NULLqualquer uma dessas circunstâncias. Eu acho que pode ser uma mensagem de erro herdada.