Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché i prefissi separati da punti vengono ignorati nell'elenco delle colonne per le istruzioni INSERT?

È improbabile per far parte dello standard SQL, data la sua dubbia utilità (anche se non ho verificato in modo specifico).

Quello che molto probabilmente sta succedendo è che sta buttando via la parte non finale della specifica della colonna perché è superflua. Hai esplicitamente indicato in quale tabella stai inserendo, con insert into SomeTable parte del comando e questo è la tabella che verrà utilizzata.

Quello che sembra che tu abbia fatto qui è trovare un modo per eseguire comandi SQL che sono meno leggibili ma non hanno alcun vantaggio reale. In tal senso, sembra simile al codice C:

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

che potrebbe forse essere scritto meglio come xyzzy++; :-)

Non ci farei assolutamente affidamento, forse perché non è standard ma soprattutto perché rende la manutenzione più difficile piuttosto che più facile, e perché so che i DBA di tutto il mondo mi rintraccerebbero e mi picchierebbero a morte con i manuali IBM DB2, la loro scelta dell'arma a causa delle dimensioni voluminose e delle capacità di schiacciare il cranio :-)

Io ho controllato in modo non specifico, almeno per ISO 9075-2:2003 che detta il linguaggio SQL03.

Sezione 14.8 di tale standard copre l'insert dichiarazione e sembra che la seguente clausola possa essere rilevante:

Senza spendere molto tempo (quel documento è lungo 1.332 pagine e richiederebbe diversi giorni per essere digerito correttamente), sospetto che potresti sostenere che la colonna potrebbe essere identificato utilizzando solo la parte finale del nome della colonna (rimuovendo da essa tutte le specifiche proprietario/utente/schema).

Soprattutto perché sembra che sia possibile una sola tabella di destinazione (nonostante le viste aggiornabili che attraversano i confini della tabella):

<insertion target> ::= <table name>

Avviso corretto:non ho controllato le successive iterazioni dello standard, quindi le cose potrebbero essere cambiate. Ma lo considero improbabile poiché non sembra esserci un vero caso d'uso per avere questa funzione.