sql >> Databasteknik >  >> RDS >> Sqlserver

Varför ignoreras punktseparerade prefix i kolumnlistan för INSERT-satser?

Det är osannolikt att vara en del av SQL-standarden, med tanke på dess tvivelaktiga användbarhet (även om jag inte har kollat ​​specifikt ).

Det som mest troligt händer är att det slänger bort den icke-slutliga delen av kolumnspecifikationen eftersom det är överflödigt. Du har uttryckligen angav vilken tabell du infogar i, med insert into SomeTable en del av kommandot, och det är tabellen som kommer att användas.

Vad du verkar ha gjort här är att hitta ett sätt att köra SQL-kommandon som är mindre läsbara men som inte har någon verklig fördel. I den andan verkar det likna C-koden:

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

som kanske bättre skulle kunna skrivas som xyzzy++; :-)

Jag skulle inte förlita mig på det alls, möjligen eftersom det inte är standard utan för det mesta för att det gör underhållet svårare snarare än enklare, och för att jag vet att DBA:er över hela världen skulle spåra mig och slå ihjäl mig med IBM DB2-manualer, deras val av vapen på grund av den voluminösa storleken och skallkrossande förmåga :-)

Jag har kontrolleras ospecifikt, åtminstone för ISO 9075-2:2003 som dikterar SQL03-språket.

Avsnitt 14.8 av den standarden täcker insert uttalande och det verkar som att följande klausul kan vara relevant:

Utan att spendera en enorm mängd tid (det dokumentet är 1 332 sidor långt och skulle ta flera dagar att smälta ordentligt) misstänker jag att du skulle kunna hävda att kolumnen skulle identifieras bara med den sista delen av kolumnnamnet (genom att ta bort alla ägare/användare/schemaspecifikationer från den).

Speciellt eftersom det verkar som att endast en måltabell är möjlig (uppdaterbara vyer som korsar tabellgränser trots detta):

<insertion target> ::= <table name>

Rättvis varning:Jag har inte kontrollerat senare iterationer av standarden så saker och ting kan ha förändrats. Men jag skulle anse det som osannolikt eftersom det inte tycks finnas någon riktig användning av den här funktionen.



  1. Hur LEFT JOIN, för att skapa ett datumintervall?

  2. Hur ringer man lagrad procedur i en vy?

  3. hur kan jag få bråkdelen av decimalen i sql

  4. Padda för Oracle..Hur kör man flera satser?