Vi el mensaje anterior de 'advertencia ANSI' hoy cuando ejecuté el script de un colega (y no sé cuál de las muchas declaraciones causó que se mostrara la advertencia).
En el pasado lo ignoré: evito los valores nulos y, por lo tanto, ¡cualquier cosa que los elimine es algo bueno en mi libro! Sin embargo, hoy la palabra 'SET' literalmente me gritó y me di cuenta de que no sé cuál es el significado de la palabra en este contexto.
Mi primer pensamiento, basado en el hecho de que es mayúscula, es que se refiere a la SET
palabra clave y significa 'asignación', como en
UPDATE <table> SET ...
...ON DELETE SET NULL...
SET IDENTITY_INSERT <table> ON
De acuerdo con la Ayuda de SQL Server, la función 'Advertencias ANSI' se basa en ISO / ANSI SQL-92, la especificación para la cual hace un solo uso del término 'Establecer operación' en un título de subsección, por lo tanto, en el caso del título, en el sección de asignación de datos. Sin embargo, después de buscar rápidamente en Google el mensaje de error, veo ejemplos que son SELECT
consultas en las que aparentemente no hay ninguna tarea involucrada.
Mi segundo pensamiento, basado en la redacción de la advertencia de SQL Server, fue que el significado matemático de conjunto está implícito. Sin embargo, no creo que la agregación en SQL sea estrictamente una operación establecida. Incluso si el equipo de SQL Server lo considera una operación de conjunto, ¿cuál es el propósito de poner la palabra 'conjunto' en mayúsculas?
Mientras buscaba en Google, noté un mensaje de error de SQL Server:
Table 'T' does not have the identity property. Cannot perform SET operation.
Las mismas palabras 'operación SET' en el mismo caso aquí solo pueden referirse a la asignación de la IDENTITY_INSERT
propiedad, lo que me lleva a mi primer pensamiento.
¿Alguien puede arrojar alguna luz sobre el asunto?
SET
que siempre está en mayúsculas como una palabra clave
SELECT * FROM sys.messages WHERE text LIKE '%SET operation%'
da otros 3 resultados que parecen indicar SET
palabras clave también.
set operations
referirse a UNION
e INTERSECT
y EXCEPT
, pero no puedo obtener el error para llegar a NULL
cualquiera de esas circunstancias. Creo que puede ser un mensaje de error heredado.