Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi les préfixes séparés par des points sont-ils ignorés dans la liste des colonnes des instructions INSERT ?

C'est peu probable faire partie du standard SQL, compte tenu de son utilité douteuse (bien que je n'aie pas vérifié spécifiquement).

Ce qui se passe très probablement, c'est qu'il jette la partie non finale de la spécification de colonne parce qu'elle est superflue. Vous avez explicitement indiqué dans quelle table vous insérez, avec le insert into SomeTable partie de la commande, et c'est la table qui sera utilisée.

Ce que vous semblez avoir fait ici est de trouver un moyen d'exécuter des commandes SQL qui sont moins lisibles mais qui n'ont aucun avantage réel. Dans cette veine, il ressemble au code C :

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

qui pourrait peut-être être mieux écrit comme xyzzy++; :-)

Je ne m'y fierais pas du tout, peut-être parce que ce n'est pas standard mais surtout parce que cela rend la maintenance plus difficile que plus facile, et parce que je sais que les DBA du monde entier me retrouveraient et me battraient à mort avec les manuels IBM DB2, leur choix d'arme en raison de la taille volumineuse et des capacités d'écrasement du crâne :-)

J'ai vérifié de manière non spécifique, au moins pour ISO 9075-2:2003 qui dicte le langage SQL03.

Rubrique 14.8 de cette norme couvre le insert déclaration et il semble que la clause suivante peut être pertinente :

Sans passer beaucoup de temps (ce document fait 1 332 pages et prendrait plusieurs jours à digérer correctement), je soupçonne que vous pourriez dire que la colonne pourrait être identifié en utilisant simplement la dernière partie du nom de la colonne (en supprimant toutes les spécifications de propriétaire/utilisateur/schéma).

D'autant plus qu'il semble qu'une seule table cible est possible (les vues pouvant être mises à jour traversant les limites de la table nonobstant) :

<insertion target> ::= <table name>

Juste avertissement :je n'ai pas vérifié les versions ultérieures de la norme, les choses peuvent donc avoir changé. Mais je considérerais cela comme peu probable car il ne semble pas y avoir de cas d'utilisation réel pour avoir cette fonctionnalité.