Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum werden durch Punkte getrennte Präfixe in der Spaltenliste für INSERT-Anweisungen ignoriert?

Es ist unwahrscheinlich Teil des SQL-Standards zu sein, angesichts seines zweifelhaften Nutzens (obwohl ich das nicht speziell überprüft habe).

Was höchstwahrscheinlich passiert, ist, dass der nicht abschließende Teil der Spaltenspezifikation weggeworfen wird, weil er überflüssig ist. Sie haben ausdrücklich angegeben, in welche Tabelle Sie einfügen, mit insert into SomeTable Teil des Befehls, und das ist die zu verwendende Tabelle.

Was Sie hier anscheinend getan haben, ist, einen Weg zu finden, SQL-Befehle auszuführen, die weniger lesbar sind, aber keinen wirklichen Vorteil haben. In dieser Hinsicht sieht es ähnlich aus wie der C-Code:

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

was vielleicht besser als xyzzy++; geschrieben werden könnte :-)

Ich würde mich überhaupt nicht darauf verlassen, möglicherweise weil es nicht Standard ist, aber meistens weil es die Wartung eher schwieriger als einfacher macht, und weil ich weiß, dass DBAs auf der ganzen Welt mich aufspüren und mit IBM DB2-Handbüchern zu Tode prügeln würden, ihre Wahl der Waffe aufgrund der voluminösen Größe und der schädelbrechenden Fähigkeiten :-)

Ich habe unspezifisch überprüft, zumindest für ISO 9075-2:2003, das die Sprache SQL03 vorschreibt.

Abschnitt 14.8 dieses Standards deckt den insert ab -Anweisung und es scheint, dass die folgende Klausel relevant sein könnte:

Ohne viel Zeit aufzuwenden (dieses Dokument ist 1.332 Seiten lang und es würde mehrere Tage dauern, es richtig zu verdauen), könnten Sie vermutlich argumentieren, dass die Spalte könnte nur anhand des letzten Teils des Spaltennamens identifiziert werden (indem alle Besitzer-/Benutzer-/Schema-Spezifikationen daraus entfernt werden).

Zumal anscheinend nur eine Zieltabelle möglich ist (trotz tabellenübergreifender aktualisierbarer Ansichten):

<insertion target> ::= <table name>

Faire Warnung:Ich habe spätere Iterationen des Standards nicht überprüft, daher können sich die Dinge geändert haben. Aber ich würde das für unwahrscheinlich halten, da es keinen wirklichen Anwendungsfall für diese Funktion zu geben scheint.