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.
Entity SQL ist eine funktionsreiche Sprache. Der Baustein von Entity SQL ist ein Ausdruck. Im Gegensatz zu herkömmlichen SQL ist Entity SQL nicht auf ein tabellarisches Resultset beschränkt: Entity SQL unterstützt das Verfassen komplexer Ausdrücke, die Literale, Parameter oder geschachtelte Ausdrücke enthalten können. Ein Wert im Ausdruck kann parametrisiert oder aus einem anderen Ausdruck zusammengesetzt werden.
Geschachtelte Ausdrücke
Ein geschachtelter Ausdruck kann an einer beliebigen Stelle platziert werden, an der ein Wert des zurückgegebenen Typs akzeptiert wird. Beispiel:
-- Returns a hierarchical collection of three elements at top-level.
-- x must be passed in the parameter collection.
ROW(@x, {@x}, {@x, 4, 5}, {@x, 7, 8, 9})
-- Returns a hierarchical collection of one element at top-level.
-- x must be passed in the parameter collection.
{{{@x}}};
Eine geschachtelte Abfrage kann in einer Projektionsklausel platziert werden. Beispiel:
-- Returns a collection of rows where each row contains an Address entity.
-- and a collection of references to its corresponding SalesOrderHeader entities.
SELECT address, (SELECT DEREF(soh)
FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
AS salesOrderHeader FROM AdventureWorksEntities.Address AS address
In Entity SQL müssen geschachtelte Abfragen immer in Klammern eingeschlossen werden:
-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );
Im folgenden Beispiel wird veranschaulicht, wie Ausdrücke in Entity SQL ordnungsgemäß geschachtelt werden: Sortieren zweier mit dem Union-Befehl zusammengefasster Abfragen.
Geschachtelte Abfragen in Projektion
Geschachtelte Abfragen in der Projektklausel werden möglicherweise in kartesische Produktabfragen auf dem Server übersetzt. In einigen Back-End-Servern, einschließlich SQL Server, kann dies dazu führen, dass die TempDB-Tabelle sehr groß wird, was sich negativ auf die Serverleistung auswirken kann.
Nachfolgend sehen Sie ein Beispiel für eine solche Abfrage:
SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c
Sortieren geschachtelter Abfragen
Im Entity Framework kann ein geschachtelter Ausdruck an einer beliebigen Stelle in der Abfrage platziert werden. Da Entity SQL beim Schreiben von Abfragen große Flexibilität bietet, ist es möglich, eine Abfrage zu schreiben, die eine Sortierung geschachtelter Abfragen enthält. Die Reihenfolge einer geschachtelten Abfrage wird jedoch nicht beibehalten.
-- The following query will order the results by last name.
SELECT C1.FirstName, C1.LastName
FROM AdventureWorksModel.Contact as C1
ORDER BY C1.LastName
-- In the following query, ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
FROM (SELECT C1.FirstName, C1.LastName
FROM AdventureWorksModel.Contact as C1
ORDER BY C1.LastName) as C2