Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Entity SQL to zaawansowany język funkcjonalny. Blok konstrukcyjny jednostki SQL jest wyrażeniem. W przeciwieństwie do konwencjonalnego języka SQL jednostka SQL nie jest ograniczona do tabelarycznego zestawu wyników: usługa Entity SQL obsługuje tworzenie złożonych wyrażeń, które mogą zawierać literały, parametry lub wyrażenia zagnieżdżone. Wartość w wyrażeniu może być sparametryzowana lub składać się z innego wyrażenia.
Wyrażenia zagnieżdżone
Zagnieżdżone wyrażenie można umieścić w dowolnym miejscu, gdzie akceptowana jest wartość typu, który zwraca. Przykład:
-- 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}}};
Zagnieżdżone zapytanie można umieścić w klauzuli projekcji. Przykład:
-- 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
W jednostki SQL zapytania zagnieżdżone muszą być zawsze ujęte w nawiasy:
-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );
W poniższym przykładzie pokazano, jak prawidłowo zagnieżdżać wyrażenia w Entity SQL: Uporządkowanie unii dwóch zapytań.
Zapytania zagnieżdżone w projekcji
Zapytania zagnieżdżone w klauzuli projektu mogą zostać przetłumaczone na zapytania produktów kartezjańskich na serwerze. W przypadku niektórych serwerów zaplecza, w tym programu SQL Server, może to spowodować, że tabela TempDB będzie bardzo duża, co może negatywnie wpłynąć na wydajność serwera.
Poniżej przedstawiono przykład takiego zapytania:
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
Porządkowanie zagnieżdżonych zapytań
W programie Entity Framework wyrażenie zagnieżdżone można umieścić w dowolnym miejscu w zapytaniu. Ponieważ język Entity SQL zapewnia dużą elastyczność podczas pisania zapytań, można napisać zapytanie zawierające kolejność zagnieżdżonych zapytań. Jednak kolejność zagnieżdżonego zapytania nie jest zachowywana.
-- 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