Guida di riferimento rapido a Entity SQL
In questo argomento viene fornita una guida di riferimento rapido alle query Entity SQL. Le query incluse in questo argomento sono basate sul modello Sales di AdventureWorks.
Valori letterali
String
I valori letterali carattere di tipo String possono essere Unicode e non Unicode. Alle stringhe non Unicode viene anteposta una N, ad esempio N'hello'
.
Di seguito è illustrato un esempio di valore letterale stringa Unicode:
'hello'
--same as
"hello"
Output:
Valore |
---|
hello |
DateTime
Nei valori letterali di tipo DateTime sono obbligatorie sia la parte relativa alla data che quella relativa all'ora. Non sono previsti valori predefiniti.
Esempio:
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
Output:
Valore |
---|
12/25/2006 1:01:00 AM |
Integer
I valori letterali Integer possono essere di tipo Int32 o Int64.
Esempio:
--a collection of integers
{1, 2, 3}
Output:
Valore |
---|
1 |
2 |
3 |
Altro
Gli altri valori letterali supportati da Entity SQL sono Guid, Binary, Float/Double, Decimal e null. I valori letterali Null in Entity SQL sono considerati compatibili con tutti i tipi in Entity Data Model (EDM).
Costruttori di tipo
ROW
ROW (Entity SQL) consente di costruire un valore (record) strutturalmente tipizzato anonimo, come in ROW(1 AS myNumber, ‘Name’ AS myName).
Esempio:
SELECT VALUE row (product.ProductID as ProductID, product.Name
as ProductName) FROM AdventureWorksEntities.Product AS product
Output:
ProductID | Name |
---|---|
1 |
Adjustable Race |
879 |
All-Purpose Bike Stand |
712 |
AWC Logo Cap |
... |
... |
MULTISET
MULTISET (Entity SQL) consente di costruire insiemi, ad esempio:
MULTISET(1,2,2,3)``--same as
-{1,2,2,3}.
Esempio:
SELECT VALUE product FROM AdventureWorksEntities.Product AS product WHERE product.ListPrice IN MultiSet (125, 300)
Output:
ProductID | Name | ProductNumber | … |
---|---|---|---|
842 |
Touring-Panniers, Large |
PA-T100 |
… |
Oggetto
Costruttore di tipi denominati (Entity SQL) consente di costruire oggetti definiti dall'utente (denominati), ad esempio person("abc", 12)
.
Esempio:
SELECT VALUE AdventureWorksModel.SalesOrderDetail (o.SalesOrderDetailID, o.CarrierTrackingNumber, o.OrderQty,
o.ProductID, o.SpecialOfferID, o.UnitPrice, o.UnitPriceDiscount,
o.rowguid, o.ModifiedDate) FROM AdventureWorksEntities.SalesOrderDetail
AS o
Output:
SalesOrderDetailID | CarrierTrackingNumber | OrderQty | ProductID |
---|---|---|---|
1 |
4911-403C-98 |
1 |
776 |
2 |
4911-403C-98 |
3 |
777 |
... |
... |
... |
... |
Riferimenti
REF
REF consente di creare un riferimento a un'istanza di un tipo di entità. La query seguente restituisce ad esempio i riferimenti a ogni entità Order nel set di entità Orders: select ref(o) from LOB.Orders as o
. Nell'esempio seguente viene utilizzato l'operatore di estrazione delle proprietà (.) per accedere a una proprietà di un'entità. Quando viene utilizzato l'operatore di estrazione delle proprietà, il riferimento viene risolto automaticamente.
Esempio:
SELECT VALUE REF(p).Name FROM
AdventureWorksEntities.Product as p
Output:
Valore |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
DEREF
DEREF consente di risolvere un valore di riferimento e produce il risultato di tale operazione. La query seguente restituisce ad esempio le entità Order per ogni oggetto Order nel set di entità Orders: select deref(o2.r) from (select ref(o) as r from LOB.Orders as o) as o2
.
Esempio:
SELECT VALUE DEREF(REF(p)).Name FROM
AdventureWorksEntities.Product as p
Output:
Valore |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
CREATEREF e KEY
CREATEREF consente di creare un riferimento passando una chiave. KEY consente di estrarre la parte relativa alla chiave da un'espressione con un riferimento a un tipo.
Esempio:
SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID)))
FROM AdventureWorksEntities.Product as p
Output:
ProductID |
---|
980 |
365 |
771 |
... |
Funzioni
Canoniche
Lo spazio dei nomi per le funzioni canoniche è Edm, come in Edm.Length("string")
. Non è necessario specificare lo spazio dei nomi a meno che non venga importato un altro spazio dei nomi contenente una funzione con lo stesso nome della funzione canonica. Se due spazi dei nomi includono la stessa funzione, l'utente deve specificare il nome completo.
Esempio:
SELECT Length(c. FirstName) As NameLen FROM
AdventureWorksEntities.Contact AS c
WHERE c.ContactID BETWEEN 10 AND 12
Output:
NameLen |
---|
6 |
6 |
5 |
Specifiche del provider Microsoft
Le funzioni specifiche del provider Microsoft sono incluse nello spazio dei nomi di SqlServer.
Esempio:
SELECT SqlServer.LEN(c.EmailAddress) As EmailLen FROM
AdventureWorksEntities.Contact AS c WHERE
c.ContactID BETWEEN 10 AND 12
Output:
EmailLen |
---|
27 |
27 |
26 |
Spazi dei nomi
USING specifica gli spazi dei nomi utilizzati in un'espressione di query.
Esempio:
using SqlServer; LOWER('AA');
Output:
Valore |
---|
aa |
Paging
Il paging può essere espresso dichiarando le sottoclausole SKIP e LIMIT nella clausola ORDER BY (Entity SQL).
Esempio:
SELECT c.ContactID as ID, c.LastName as Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
Output:
ID | Name |
---|---|
10 |
Adina |
11 |
Agcaoili |
12 |
Aguilar |
Raggruppamento
GROUPING BY specifica i gruppi nei quali devono essere inseriti gli oggetti restituiti da un'espressione (SELECT) di query.
Esempio:
SELECT VALUE name FROM AdventureWorksEntities.Product as P
GROUP BY P.Name HAVING MAX(P.ListPrice) > 5
Output:
name |
---|
LL Mountain Seat Assembly |
ML Mountain Seat Assembly |
HL Mountain Seat Assembly |
... |
Navigazione
L'operatore di navigazione delle relazioni consente di eseguire la navigazione in una relazione da un'entità (entità finale di origine) a un'altra (entità finale di destinazione). NAVIGATE accetta il tipo di relazione qualificato come <spazio dei nomi>.<nome del tipo di relazione>. NAVIGATE restituisce Ref<T> se la cardinalità dell'entità finale è 1. Se la cardinalità dell'entità finale è n, viene restituito Collection<Ref<T>>.
Esempio:
SELECT a.AddressID, (SELECT VALUE EREF(v) FROM
NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v)
FROM AdventureWorksEntities.Address AS a
Output:
AddressID |
---|
1 |
2 |
3 |
... |
SELECT VALUE e SELECT
SELECT VALUE
Entity SQL fornisce la clausola SELECT VALUE per consentire di ignorare la costruzione di riga implicita. In una clausola SELECT VALUE può essere specificato un solo elemento. Quando viene utilizzata questa clausola, non viene costruito alcun wrapper di riga intorno agli elementi nella clausola SELECT e può essere prodotto un insieme della forma desiderata, ad esempio SELECT VALUE a
.
Esempio:
SELECT VALUE p.Name FROM AdventureWorksEntities.Product as p
Output:
Name |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
SELECT
Entity SQL fornisce inoltre il costruttore ROW per la costruzione di righe arbitrarie. SELECT accetta uno o più elementi nella proiezione e restituisce un record di dati con campi, ad esempio SELECT a, b, c
.
Esempio:
SELECT p.Name, p.ProductID FROM AdventureWorksEntities.Product as p Output:
Name | ProductID |
---|---|
Adjustable Race |
1 |
All-Purpose Bike Stand |
879 |
AWC Logo Cap |
712 |
... |
... |
Espressione CASE
L'espressione CASE valuta un set di espressioni booleane per determinare il risultato.
Esempio:
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
Output:
Valore |
---|
TRUE |