Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо разделените с точка префикси се игнорират в списъка с колони за оператори INSERT?

Малко вероятно е да бъде част от SQL стандарта, като се има предвид неговата съмнителна полезност (въпреки че не съм проверил специално).

Това, което най-вероятно се случва, е, че изхвърля непоследната част от спецификацията на колоната, защото е излишна. Имате изрично посочи в каква таблица вмъквате, с insert into SomeTable част от командата и това е таблицата, която ще се използва.

Това, което изглежда сте направили тук, е да намерите начин да изпълнявате SQL команди, които са по-малко четими, но нямат реално предимство. В този смисъл изглежда подобно на C кода:

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

което може би би могло да бъде по-добре написано като xyzzy++; :-)

Изобщо не бих разчитал на него, евентуално защото не е стандартно, но предимно защото прави поддръжката по-скоро трудна, отколкото лесна, и защото знам, че администраторите на бази данни по целия свят биха ме проследили и биха ме до смърт с ръководствата на IBM DB2, техният избор на оръжие поради обемистия размер и способностите за трошене на черепи :-)

Аз имам проверени неспецифично, поне за ISO 9075-2:2003, който диктува езика SQL03.

Раздел 14.8 на този стандарт покрива insert и изглежда, че следната клауза може да е уместна:

Без да отделяте много време (този документ е дълъг 1332 страници и ще отнеме няколко дни, за да се усвои правилно), подозирам, че можете да спорите, че колоната може да бъдат идентифицирани само с помощта на последната част от името на колоната (чрез премахване на всички спецификации на собственик/потребител/схема от нея).

Особено след като изглежда, че е възможна само една целева таблица (независимо от актуализирани изгледи, пресичащи границите на таблицата):

<insertion target> ::= <table name>

Честно предупреждение:Не съм проверявал по-късни итерации на стандарта, така че нещата може да са се променили. Но смятам, че това е малко вероятно, тъй като изглежда няма реален случай за използване на тази функция.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Копирайте базата данни на SQL Server Express на друг компютър

  2. ALTER TABLE DROP COLUMN не успя, защото един или повече обекти имат достъп до тази колона

  3. как да извлека само годината от датата в sql server 2008?

  4. Съхранявайте отговорите в sql таблица с уникален идентификатор и съхранявайте всеки отговор в колони

  5. Сравнете стойността на множество колони от две различни бази данни