sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué se ignoran los prefijos separados por puntos en la lista de columnas para las declaraciones INSERT?

Es poco probable para ser parte del estándar SQL, dada su dudosa utilidad (aunque no lo he comprobado específicamente).

Lo más probable es que se descarte la parte no final de la especificación de la columna porque es superflua. Tienes explícitamente indicó en qué tabla está insertando, con insert into SomeTable parte del comando, y eso es la tabla que se utilizará.

Lo que parece haber hecho aquí es encontrar una manera de ejecutar comandos SQL que sean menos legibles pero que no tengan una ventaja real. En ese sentido, parece similar al código C:

int nine = 9;
int eight = 8;
xyzzy = xyzzy + nine - eight;

que tal vez podría escribirse mejor como xyzzy++; :-)

No confiaría en ello en absoluto, posiblemente porque no es estándar pero principalmente porque hace que el mantenimiento sea más difícil en lugar de fácil, y porque sé que los DBA de todo el mundo me localizarían y me matarían a golpes con los manuales de IBM DB2, su elección de arma debido al tamaño voluminoso y las habilidades aplastantes :-)

yo tengo comprobado de forma no específica, al menos para ISO 9075-2:2003 que dicta el lenguaje SQL03.

Sección 14.8 de ese estándar cubre el insert declaración y parece que la siguiente cláusula puede ser relevante:

Sin gastar una gran cantidad de tiempo (ese documento tiene 1332 páginas y llevaría varios días digerirlo correctamente), sospecho que podría argumentar que la columna podría identificarse simplemente usando la parte final del nombre de la columna (eliminando todas las especificaciones de propietario/usuario/esquema).

Especialmente porque parece que solo es posible una tabla de destino (a pesar de que las vistas actualizables cruzan los límites de la tabla):

<insertion target> ::= <table name>

Advertencia justa:no he verificado iteraciones posteriores del estándar, por lo que es posible que las cosas hayan cambiado. Pero lo consideraría poco probable ya que no parece haber un caso de uso real para tener esta característica.