J'ai vu le message «Avertissement ANSI» ci-dessus aujourd'hui lors de l'exécution du script d'un collègue (et je ne sais pas laquelle des nombreuses instructions a provoqué l'affichage de l'avertissement).
Dans le passé, je l'ai ignoré: j'évite moi-même les valeurs nulles et donc tout ce qui pourrait les éliminer est une bonne chose dans mon livre! Cependant, aujourd'hui, le mot «SET» m'a littéralement crié dessus et j'ai réalisé que je ne sais pas quel est le sens du mot est censé être dans ce contexte.
Ma première pensée, basée sur le fait qu'il est en majuscules, est qu'il se réfère au SET
mot - clé et signifie «affectation», comme dans
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
Selon l'aide de SQL Server, la fonctionnalité «ANSI warnings» est basée sur ISO / ANSI SQL-92, dont la spécification n'utilise qu'une seule fois le terme «Set operation» dans un titre de sous-section, donc dans le cas du titre, dans le section d'attribution des données. Cependant, après une recherche rapide sur Google du message d'erreur, je vois des exemples qui sont des SELECT
requêtes avec apparemment aucune affectation impliquée.
Ma deuxième pensée, basée sur le libellé de l'avertissement SQL Server, était que la signification mathématique de set était implicite. Cependant, je ne pense pas que l'agrégation en SQL soit à proprement parler une opération d'ensemble. Même si l'équipe SQL Server considère qu'il s'agit d'une opération set, quel est le but de mettre le mot «set» en majuscules?
Pendant la recherche sur Google, j'ai remarqué un message d'erreur SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
Les mêmes mots «opération SET» dans le même cas ici ne peuvent faire référence qu'à l'attribution de la IDENTITY_INSERT
propriété, ce qui me ramène à ma première pensée.
Quelqu'un peut-il faire la lumière sur la question?
SET
est toujours en majuscules comme un mot
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'
donne 3 autres résultats qui semblent tous indiquer également un SET
mot - clé.
set operations
référence à UNION
et INTERSECT
et EXCEPT
, mais je ne parviens pas à trouver l'erreur NULL
dans aucune de ces circonstances. Je pense que cela peut être un message d'erreur hérité.