Aide-mémoire sur Entity SQL
Cette rubrique fournit un aide-mémoire sur les requêtes Entity SQL . Les requêtes de cette rubrique sont basées sur le modèle de vente Adventure Works Sales Model.
Littéraux
Chaîne
Les littéraux de chaîne de caractères peuvent être au format Unicode ou non-Unicode. Les chaînes Unicode sont précédées de N. Par exemple, N'hello'
.
Exemple de littéral de chaîne non-Unicode :
'hello'
--same as
"hello"
Sortie :
Valeur |
---|
hello |
DateTime
Dans les littéraux DateTime, les parties date et heure sont obligatoires. Il n'existe pas de valeur par défaut.
Exemple :
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
Sortie :
Valeur |
---|
12/25/2006 1:01:00 AM |
Integer
Les littéraux d'entiers peuvent être de type Int32 (123), UInt32 (123U), Int64 (123L) et UInt64 (123UL).
Exemple :
--a collection of integers
{1, 2, 3}
Sortie :
Valeur |
---|
1 |
2 |
3 |
Autre
Les autres littéraux pris en charge par Entity SQL sont Guid, Binary, Float/Double, Decimal et la valeur Null. Les littéraux NULL dans Entity SQL sont considérés compatibles avec tous les autres types dans le modèle conceptuel.
Constructeurs de type
ROW
ROW (Entity SQL) construit une valeur anonyme, structurellement typée (enregistrement) comme dans : ROW(1 AS myNumber, ‘Name’ AS myName).
Exemple :
SELECT VALUE row (product.ProductID as ProductID, product.Name
as ProductName) FROM AdventureWorksEntities.Product AS product
Sortie :
ProductID | Nom |
---|---|
1 |
Adjustable Race |
879 |
All-Purpose Bike Stand |
712 |
AWC Logo Cap |
... |
... |
MULTISET
MULTISET (Entity SQL) construit des collections, telles que :
MULTISET(1,2,2,3)
--same as
-{1,2,2,3}.
Exemple :
SELECT VALUE product FROM AdventureWorksEntities.Product AS product WHERE product.ListPrice IN MultiSet (125, 300)
Sortie :
ProductID | Nom | ProductNumber | … |
---|---|---|---|
842 |
Touring-Panniers, Large |
PA-T100 |
… |
Object
Constructeur de type nommé (Entity SQL) construit des objets définis par l'utilisateur (nommés), tels que person("abc", 12)
.
Exemple :
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
Sortie :
SalesOrderDetailID | CarrierTrackingNumber | OrderQty | ProductID | ... |
---|---|---|---|---|
1 |
4911-403C-98 |
1 |
776 |
... |
2 |
4911-403C-98 |
3 |
777 |
... |
... |
... |
... |
... |
... |
Références
REF
REF crée une référence à une instance de type entité. Par exemple, la requête suivante retourne les références à chaque entité Order dans le jeu d'entités Orders :
SELECT REF(o) AS OrderID FROM Orders AS o
Sortie :
Valeur |
---|
1 |
2 |
3 |
... |
L'exemple suivant utilise l'opérateur d'extraction de propriété (.) pour accéder à une propriété d'entité. Lors de l'utilisation de l'opérateur d'extraction de propriété, la référence est automatiquement supprimée.
Exemple :
SELECT VALUE REF(p).Name FROM
AdventureWorksEntities.Product as p
Sortie :
Valeur |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
DEREF
DEREF supprime une valeur de référence et génère le résultat de ce déréférencement. Par exemple, la requête suivante génère les entités Order pour chaque élément Order du jeu d'entités Orders : SELECT DEREF(o2.r) FROM (SELECT REF(o) AS r FROM LOB.Orders AS o) AS o2
.
Exemple :
SELECT VALUE DEREF(REF(p)).Name FROM
AdventureWorksEntities.Product as p
Sortie :
Valeur |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
CREATEREF et KEY
CREATEREF crée une référence qui passe une clé. KEY extrait la partie clé d'une expression avec la référence de type.
Exemple :
SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID)))
FROM AdventureWorksEntities.Product as p
Sortie :
ProductID |
---|
980 |
365 |
771 |
... |
Fonctions
Canoniques
L'espace de noms des fonctions canoniques est Edm, comme dans Edm.Length("string")
. Vous n'avez pas besoin de spécifier l'espace de noms sauf si un autre espace de noms est importé et qu'il contient une fonction portant le même nom qu'une fonction canonique. Si deux espaces de noms partagent la même fonction, l'utilisateur doit spécifier le nom complet.
Exemple :
SELECT Length(c. FirstName) As NameLen FROM
AdventureWorksEntities.Contact AS c
WHERE c.ContactID BETWEEN 10 AND 12
Sortie :
NameLen |
---|
6 |
6 |
5 |
Spécifiques au fournisseur Microsoft
Les fonctions spécifiques au fournisseur Microsoft figurent dans l'espace de noms SqlServer.
Exemple :
SELECT SqlServer.LEN(c.EmailAddress) As EmailLen FROM
AdventureWorksEntities.Contact AS c WHERE
c.ContactID BETWEEN 10 AND 12
Sortie :
EmailLen |
---|
27 |
27 |
26 |
Espaces de noms
USING spécifie les espaces de noms utilisés dans une expression de requête.
Exemple :
using SqlServer; LOWER('AA');
Sortie :
Valeur |
---|
aa |
Pagination
La pagination peut s'effectuer en déclarant des sous-clauses SKIP et LIMIT de la clause ORDER BY (Entity SQL).
Exemple :
SELECT c.ContactID as ID, c.LastName as Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
Sortie :
ID | Name |
---|---|
10 |
Adina |
11 |
Agcaoili |
12 |
Aguilar |
Regroupement
GROUPING BY spécifie des groupes dans lesquels doivent être placés les objets retournés par une expression de requête (SELECT).
Exemple :
SELECT VALUE name FROM AdventureWorksEntities.Product as P
GROUP BY P.Name HAVING MAX(P.ListPrice) > 5
Sortie :
name |
---|
LL Mountain Seat Assembly |
ML Mountain Seat Assembly |
HL Mountain Seat Assembly |
... |
Navigation
L'opérateur de navigation de relations vous permet de parcourir la relation entre une entité (terminaison From) et une autre entité (terminaison To). NAVIGATE accepte le type de relation nommé <espace de noms>.<nom du type de relation>. Navigate retourne Ref<T> si la cardinalité de la terminaison To est 1. Si la cardinalité de la terminaison To est n, la valeur retournée est Collection<Ref<T>>.
Exemple :
SELECT a.AddressID, (SELECT VALUE DEREF(v) FROM
NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v)
FROM AdventureWorksEntities.Address AS a
Sortie :
AddressID |
---|
1 |
2 |
3 |
... |
SELECT VALUE et SELECT
SELECT VALUE
Entity SQL fournit la clause SELECT VALUE pour ignorer la construction de ligne implicite. Un seul élément peut être spécifié dans une clause SELECT VALUE. Lorsqu'une telle clause est utilisée, aucun wrapper de ligne n'est construit autour des éléments de la clause SELECT et une collection de la forme souhaitée peut être générée, par exemple : SELECT VALUE a
.
Exemple :
SELECT VALUE p.Name FROM AdventureWorksEntities.Product as p
Sortie :
Name |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
SELECT
Entity SQL fournit également le constructeur de ligne pour construire des lignes arbitraires. SELECT extrait un ou plusieurs éléments de la projection et produit un enregistrement de données avec des champs, par exemple : SELECT a, b, c
.
Exemple :
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 |
... |
... |
Expression CASE
L'expression CASE évalue un ensemble d'expressions booléennes pour déterminer le résultat.
Exemple :
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
Sortie :
Valeur |
---|
TRUE |