Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az entity SQL egy sokoldalú funkcionális nyelv. Az Entity SQL építőeleme egy kifejezés. A hagyományos SQL-sel ellentétben az Entity SQL nem korlátozódik táblázatos eredményhalmazra: Az Entity SQL támogatja az olyan összetett kifejezések írását, amelyek literálokkal, paraméterekkel vagy beágyazott kifejezésekkel rendelkeznek. A kifejezés egy értéke paraméterezhető vagy más kifejezésből állhat.
Beágyazott kifejezések
Beágyazott kifejezés bárhol elhelyezhető, ahol a visszaadott típusú értéket elfogadják. Például:
-- 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}}};
A beágyazott lekérdezések elhelyezhetők egy vetítési záradékban. Például:
-- 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
Az Entity SQL-ben a beágyazott lekérdezéseket mindig zárójelek közé kell tenni:
-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );
Az alábbi példa bemutatja, hogyan ágyazhatja be megfelelően a kifejezéseket az Entity SQL-ben: Útmutató: A két lekérdezés uniójának sorrendje.
Beágyazott lekérdezések a kivetítésben
Előfordulhat, hogy a projekt záradékában lévő beágyazott lekérdezések cartesian terméklekérdezésekké lesznek lefordítva a kiszolgálón. Egyes háttérkiszolgálókon, például az SQL Serveren ez a TempDB-tábla nagy méretűre állítását okozhatja, ami hátrányosan befolyásolhatja a kiszolgáló teljesítményét.
Az alábbi példa egy ilyen lekérdezésre:
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
Beágyazott lekérdezések rendezése
Az Entity Frameworkben egy beágyazott kifejezés bárhol elhelyezhető a lekérdezésben. Mivel az Entity SQL nagy rugalmasságot tesz lehetővé a lekérdezések írásában, a beágyazott lekérdezések sorrendjét tartalmazó lekérdezések is írhatók. A beágyazott lekérdezések sorrendje azonban nem marad meg.
-- 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