Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bezeichner werden in Entity SQL verwendet, um Abfrageausdruckaliasen, Variablenverweise, Eigenschaften von Objekten, Funktionen usw. darzustellen. Entitäts-SQL stellt zwei Arten von Bezeichnern bereit: einfache Bezeichner und an zitierte Bezeichner.
Einfache Bezeichner
Ein einfacher Bezeichner in Entity SQL ist eine Sequenz von alphanumerischen und Unterstrichzeichen. Das erste Zeichen des Bezeichners muss ein alphabetisches Zeichen (a-z oder A-Z) sein.
Zitatierte Bezeichner
Ein an zitierter Bezeichner ist eine beliebige Abfolge von Zeichen, die in eckige Klammern ([]) eingeschlossen sind. Mit an zitierten Bezeichnern können Sie Bezeichner mit Zeichen angeben, die in Bezeichnern ungültig sind. Alle Zeichen zwischen den eckigen Klammern werden Teil des Bezeichners, einschließlich aller Leerzeichen.
Ein Bezeichner mit Anmerkung darf die folgenden Zeichen nicht enthalten:
Zeilenvorschub.
Wagenrücklauf.
Tabulatoren.
Backspace.
Zusätzliche eckige Klammern (d. a. eckige Klammern innerhalb der eckigen Klammern, die den Bezeichner delineieren).
Ein Anmerkungsbezeichner kann Unicode-Zeichen enthalten.
Mit an zitierten Bezeichnern können Sie Eigenschaftsnamenzeichen erstellen, die in Bezeichnern ungültig sind, wie im folgenden Beispiel veranschaulicht:
SELECT c.ContactName AS [Contact Name] FROM customers AS c
Sie können auch Kennungen verwenden, um einen Bezeichner anzugeben, der ein reserviertes Schlüsselwort von Entity SQL ist. Wenn der Typ Email beispielsweise eine Eigenschaft mit dem Namen "From" aufweist, können Sie sie mit eckigen Klammern wie folgt aus dem reservierten Schlüsselwort FROM disambiguieren:
SELECT e.[From] FROM emails AS e
Sie können einen Kennungsbezeichner auf der rechten Seite eines Punktoperators (.) verwenden.
SELECT t FROM ts as t WHERE t.[property] == 2
Um die eckige Klammer in einem Bezeichner zu verwenden, fügen Sie eine zusätzliche eckige Klammer hinzu. Im folgenden Beispiel ist "abc]" der Bezeichner:
SELECT t from ts as t WHERE t.[abc]]] == 2
Informationen zur Semantik für den Vergleich von Bezeichnern finden Sie unter Eingabezeichensatz.
Aliasingregeln
Es wird empfohlen, bei Bedarf Aliase in Entity SQL-Abfragen anzugeben, einschließlich der folgenden Entity SQL-Konstrukte:
Felder eines Zeilenkonstruktors.
Elemente in der FROM-Klausel eines Abfrageausdrucks.
Elemente in der SELECT-Klausel eines Abfrageausdrucks.
Elemente in der GROUP BY-Klausel eines Abfrageausdrucks.
Gültige Aliase
Gültige Aliase in Entity SQL sind beliebige einfache Bezeichner oder an zitierte Bezeichner.
Aliasgenerierung
Wenn in einem Entity SQL-Abfrageausdruck kein Alias angegeben ist, versucht Entity SQL, einen Alias basierend auf den folgenden einfachen Regeln zu generieren:
Wenn der Abfrageausdruck (für den der Alias nicht angegeben ist) ein einfacher oder zitierter Bezeichner ist, wird dieser Bezeichner als Alias verwendet. Beispielsweise wird
ROW(a, [b])zuROW(a AS a, [b] AS [b]).Wenn der Abfrageausdruck ein komplexerer Ausdruck ist, aber die letzte Komponente dieses Abfrageausdrucks ein einfacher Bezeichner ist, wird dieser Bezeichner als Alias verwendet. Beispielsweise wird
ROW(a.a1, b.[b1])zuROW(a.a1 AS a1, b.[b1] AS [b1]).
Es wird empfohlen, dass Sie keine impliziten Aliase verwenden, wenn Sie den Aliasnamen später verwenden möchten. Wenn Aliase (implizit oder explizit) im selben Bereich auftreten oder wiederholt werden, tritt ein Kompilierungsfehler auf. Ein impliziter Alias übergibt die Kompilierung, auch wenn ein expliziter oder impliziter Alias mit demselben Namen vorhanden ist.
Implizite Aliase werden basierend auf der Benutzereingabe automatisch generiert. Die folgende Codezeile generiert beispielsweise NAME als Alias für beide Spalten und führt daher zu Konflikten.
SELECT product.NAME, person.NAME
Die folgende Codezeile, die explizite Aliase verwendet, schlägt ebenfalls fehl. Der Fehler wird jedoch durch Lesen des Codes deutlicher dargestellt.
SELECT 1 AS X, 2 AS X …
Bereichsregeln
Entity SQL definiert Bereichsregeln, die bestimmen, wann bestimmte Variablen in der Abfragesprache sichtbar sind. Einige Ausdrücke oder Anweisungen führen neue Namen ein. Die Bereichsregeln bestimmen, wo diese Namen verwendet werden können, und wann oder wo eine neue Deklaration mit demselben Namen wie ein anderer seinen Vorgänger ausblenden kann.
Wenn Namen in einer Entity SQL-Abfrage definiert sind, werden sie innerhalb eines Bereichs definiert. Ein Bereich deckt einen gesamten Bereich der Abfrage ab. Alle Ausdrücke oder Namensverweise innerhalb eines bestimmten Bereichs können Namen sehen, die innerhalb dieses Bereichs definiert sind. Bevor ein Bereich beginnt und nachdem er endet, können nicht auf Namen verwiesen werden, die innerhalb des Bereichs definiert sind.
Bereiche können geschachtelt werden. Teile von Entity SQL führen neue Bereiche ein, die ganze Regionen abdecken, und diese Regionen können andere Entitäts-SQL-Ausdrücke enthalten, die auch Bereiche einführen. Wenn Bereiche geschachtelt sind, können Verweise auf Namen vorgenommen werden, die im innersten Bereich definiert sind, die den Verweis enthalten. Verweise können auch auf alle Namen erfolgen, die in allen äußeren Bereichen definiert sind. Alle zwei bereiche, die innerhalb desselben Bereichs definiert sind, gelten als gleichgeordnete Bereiche. Verweise können nicht auf Namen erfolgen, die in gleichgeordneten Bereichen definiert sind.
Wenn ein in einem inneren Bereich deklarierter Name mit einem Namen übereinstimmt, der in einem äußeren Bereich deklariert ist, verweisen Verweise innerhalb des inneren Bereichs oder innerhalb der innerhalb dieses Bereichs deklarierten Bereiche nur auf den neu deklarierten Namen. Der Name im äußeren Bereich ist ausgeblendet.
Auch innerhalb desselben Bereichs können keine Namen referenziert werden, bevor sie definiert werden.
Globale Namen können als Teil der Ausführungsumgebung vorhanden sein. Dies kann Namen persistenter Auflistungen oder Umgebungsvariablen umfassen. Damit ein Name global ist, muss er im äußersten Bereich deklariert werden.
Parameter befinden sich nicht in einem Bereich. Da Verweise auf Parameter spezielle Syntax enthalten, kollidieren die Namen von Parametern nie mit anderen Namen in der Abfrage.
Abfrageausdrücke
Ein Entity SQL-Abfrageausdruck führt einen neuen Bereich ein. Namen, die in der FROM-Klausel definiert sind, werden in der Reihenfolge der Darstellung von links nach rechts in den Bereich eingefügt. In der Verknüpfungsliste können Ausdrücke auf Namen verweisen, die weiter oben in der Liste definiert wurden. Öffentliche Eigenschaften (Felder usw.), die in der FROM-Klausel identifiziert werden, werden dem Bereich nicht hinzugefügt. Auf sie muss immer durch den aliasqualifizierten Namen verwiesen werden. In der Regel werden alle Teile des SELECT-Ausdrucks innerhalb des Bereichs berücksichtigt.
Die GROUP BY-Klausel führt auch einen neuen gleichgeordneten Bereich ein. Jede Gruppe kann über einen Gruppennamen verfügen, der auf die Sammlung von Elementen in der Gruppe verweist. Jeder Gruppierungsausdruck führt auch einen neuen Namen in den Gruppenbereich ein. Darüber hinaus wird dem Bereich auch das Schachtelaggregat (oder die benannte Gruppe) hinzugefügt. Die Gruppierungsausdrücke selbst befinden sich innerhalb des Bereichs. Wenn jedoch eine GROUP BY-Klausel verwendet wird, werden die SELECT-List -Klausel (Projektion), HAVING-Klausel und ORDER BY-Klausel als innerhalb des Gruppenbereichs und nicht im Bereich betrachtet. Aggregate erhalten eine spezielle Behandlung, wie in der folgenden Aufzählung beschrieben.
Im Folgenden finden Sie weitere Hinweise zu Bereichen:
Die Auswahlliste kann neue Namen in den Bereich einführen, in der Reihenfolge. Projektionsausdrücke rechts können auf Namen verweisen, die auf der linken Seite projiziert werden.
Die ORDER BY-Klausel kann auf Namen (Aliase) verweisen, die in der Auswahlliste angegeben sind.
Die Reihenfolge der Auswertung von Klauseln innerhalb des SELECT-Ausdrucks bestimmt die Reihenfolge, in der Namen in den Bereich eingeführt werden. Die FROM-Klausel wird zuerst ausgewertet, gefolgt von der WHERE-Klausel, GROUP BY-Klausel, HAVING-Klausel, SELECT-Klausel und schließlich der ORDER BY-Klausel.
Aggregatverarbeitung
Entity SQL unterstützt zwei Formen von Aggregaten: sammlungsbasierte Aggregate und gruppenbasierte Aggregate. Sammlungsbasierte Aggregate sind das bevorzugte Konstrukt in Entity SQL, und gruppenbasierte Aggregate werden für die SQL-Kompatibilität unterstützt.
Beim Auflösen eines Aggregats versucht Entity SQL zunächst, es als sammlungsbasiertes Aggregat zu behandeln. Wenn dies fehlschlägt, transformiert Entity SQL die Aggregateingabe in einen Verweis auf das Schachtelaggregat und versucht, diesen neuen Ausdruck aufzulösen, wie im folgenden Beispiel dargestellt.
AVG(t.c) becomes AVG(group..(t.c))