sql >> Database >  >> RDS >> Sqlserver

Waarom worden door punten gescheiden voorvoegsels genegeerd in de kolomlijst voor INSERT-instructies?

Het is onwaarschijnlijk om deel uit te maken van de SQL-standaard, gezien het twijfelachtige nut ervan (hoewel ik niet specifiek heb gecontroleerd).

Wat hoogstwaarschijnlijk gebeurt, is dat het niet-laatste deel van de kolomspecificatie wordt weggegooid omdat het overbodig is. Je hebt expliciet vermeld in welke tabel u invoegt, met de insert into SomeTable onderdeel van het commando, en dat is de tabel die zal worden gebruikt.

Wat je hier lijkt te hebben gedaan, is een manier vinden om SQL-commando's uit te voeren die minder leesbaar zijn maar geen echt voordeel hebben. In die geest lijkt het op de C-code:

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

wat misschien beter geschreven kan worden als xyzzy++; :-)

Ik zou er helemaal niet op vertrouwen, mogelijk omdat het niet standaard is, maar meestal omdat het onderhoud moeilijker maakt in plaats van gemakkelijker, en omdat ik weet dat DBA's over de hele wereld me zouden opsporen en doodslaan met IBM DB2-handleidingen, hun wapenkeuze vanwege de omvangrijke omvang en schedelverpletterende vaardigheden :-)

Ik heb niet-specifiek gecontroleerd, in ieder geval voor ISO 9075-2:2003 die de taal SQL03 dicteert.

Sectie 14.8 van die standaard dekt de insert verklaring en het lijkt erop dat de volgende clausule relevant kan zijn:

Zonder een enorme hoeveelheid tijd te besteden (dat document is 1332 pagina's lang en zou enkele dagen duren om goed te verwerken), vermoed ik dat je zou kunnen beweren dat de kolom zo worden geïdentificeerd door alleen het laatste deel van de kolomnaam te gebruiken (door alle specificaties van de eigenaar/gebruiker/schema eruit te verwijderen).

Vooral omdat het lijkt alsof er maar één doeltabel mogelijk is (bij te werken weergaven die tabelgrenzen overschrijden):

<insertion target> ::= <table name>

Eerlijke waarschuwing:ik heb latere versies van de standaard niet gecontroleerd, dus het kan zijn dat er dingen zijn veranderd. Maar ik zou dat onwaarschijnlijk achten, aangezien er geen echte use case lijkt te zijn voor het hebben van deze functie.



  1. OracleConnection.Open gooit ORA-12541 TNS geen luisteraar

  2. Socketuitzonderingen bij het proberen verbinding te maken met de MySql-database vanaf gitpod IDE (ubuntu-server)

  3. Hoe vind je de meest populaire woordvoorvallen in MySQL?

  4. SQL-query om de dichtstbijzijnde datum te tonen?