SQL behandelt Abfragen wie
%Vor%als
%Vor%ist die Abkürzung für
%Vor%SQL Server erwartet, dass Spaltennamen einigen Regeln für Namenskonventionen folgen, wie in diesem MSDN-Link beschrieben
Die Namen von Variablen, Funktionen und gespeicherten Prozeduren müssen den folgenden Regeln für Transact-SQL-IDs entsprechen. Das erste Zeichen muss einer der folgenden sein:
- Ein Buchstabe gemäß dem Unicode-Standard 3.2. Die Unicode-Definition von Buchstaben enthält lateinische Zeichen von a bis z, von A bis Z, und auch Buchstaben aus anderen Sprachen.
Der Unterstrich (_), ein Vorzeichen (@) oder ein Nummernzeichen (#).
Bestimmte Symbole am Anfang eines Bezeichners haben in SQL Server eine besondere Bedeutung. Ein regulärer Bezeichner, der mit dem at beginnt sign kennzeichnet immer eine lokale Variable oder einen Parameter und kann nicht verwendet werden als der Name eines anderen Objekttyps. Eine ID, die beginnt mit einem Nummernzeichen bezeichnet eine temporäre Tabelle oder Prozedur. Ein Bezeichner, die mit doppelten Zahlenzeichen (##) beginnen, bezeichnen ein globales temporäres Objekt Obwohl das Nummernzeichen oder das doppelte Nummernzeichen Zeichen können verwendet werden, um die Namen anderer Arten von Objekten zu beginnen, Wir empfehlen diese Praxis nicht.
Einige Transact-SQL-Funktionen haben Namen, die mit doppelten at-Zeichen (@@) beginnen. Um Verwechslungen mit diesen Funktionen zu vermeiden, sollten Sie dies nicht tun Verwenden Sie Namen, die mit @@ beginnen.
Auch die Syntax für SELECT
nach MSDN ist wie
WÄHLEN [ALLE | DISTINCT] [TOP (Ausdruck) [PERCENT] [MIT KRAWATTEN ]] :: = { * | {Tabellenname | Ansichtsname | Tabellenalias}. * | { [{Tabellenname | Ansichtsname | Tabellenalias}. ] {Spaltenname | $ IDENTITÄT | $ ROWGUID} | udt_spaltenname [{. | ::} {{Eigenschaftsname | Feldname } | Methodenname (Argument [, ... n])}] | Ausdruck [[AS] Spaltenalias] } | Spaltenalias = Ausdruck } [, ... n]
In diesem Fall sucht der SQL-Parser zuerst nach dem Tabellennamen und dann nach dem Spaltennamen, Identität und Rowguid und so weiter, bis die Übereinstimmung mit
gefunden wird| Ausdruck [[AS] column_alias]
Es liest dann den Literalwert bis zum Unterstrich, der erkennt, dass das Literal beendet sein muss, und beginnt die späteren Zeichen als Spaltenalias ohne explizite AS
Um dies zu überprüfen, versuchen Sie folgenden Code in SQL Server
%Vor%Dies führt zu den gleichen Ergebnissen wie
%Vor% Auch um zu überprüfen, was ich gerade oben geschrieben habe, siehe den Screenshot von SSMS, der eine Code-Hervorhebung auf AS
In Ihrem ersten Beispiel 2015 ist Integer-Literal und im zweiten Beispiel 2.1 ist Dezimal-Literal
In Ihrem dritten Beispiel ist a kein gültiges Literal. Wenn Sie es versuchen
%Vor%Damit erhalten Sie ein Ergebnis wie
%Vor%PS : Ihr werdet sehen, dass dies bei # genauso funktioniert.
So SELECT 2015#11
wird ähnliche Ergebnisse geben
Um zu verstehen, was passiert, müssen Sie verstehen, was SQL Server als Bezeichner akzeptiert. Es gibt viele Regeln, die hier dokumentiert sind. Aber das Wichtigste ist:
Das erste Zeichen muss einer der folgenden sein:
Ein Buchstabe gemäß dem Unicode-Standard 3.2. Die Unicode-Definition von Buchstaben enthält lateinische Zeichen von a bis z, von A bis Z, und auch Buchstaben aus anderen Sprachen.
Der Unterstrich (_), ein Vorzeichen (@) oder ein Nummernzeichen (#).
Der wichtige Punkt ist, dass, wenn der SQL Server-Parser auf eine Ziffer stößt, er sich selbst sagt: "Dies ist eine Zahl". Wenn es den Unterstrich trifft, heißt es "Nun, keine Nummer mehr, muss etwas anderes beginnen". Der Parser erkennt die zweite Komponente als gültigen Bezeichner. Dies wird folgendermaßen behandelt:
%Vor% was für einen Spaltenalias ist, auch ohne as
.
Tags und Links sql sql-server tsql sql-server-2012