Aide-mémoire sur Entity SQL
Cette rubrique fournit un aide-mémoire sur les requêtes Entité 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 chaînes de caractères littérales peuvent être au format Unicode ou non-Unicode. Les chaînes non-Unicode sont précédées de N. Par exemple, N'hello'
.
Voici un exemple de chaîne littérale 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 |
Entier
Les littéraux Integer (d'entier) peuvent être de type Int32 ou Int64.
Exemple :
--a collection of integers
{1, 2, 3}
Sortie :
Valeur |
---|
1 |
2 |
3 |
Autres
Entité SQL prend également en charge d'autres littéraux notamment : Guid, Binary, Float/Double, Decimal et null. Les littéraux NULL dans Entité SQL sont considérés compatibles avec tous les autres types dans le modèle EDM (Entity Data Model).
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 | Name |
---|---|
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 |
… |
Objet
Constructeur de type nommé (Entity SQL) construit des objets (nommés) définis par l'utilisateur, 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) from LOB.Orders as o
. 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 se trouvent 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 des 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 le cardinalité de la terminaison To est 1. Si le cardinalité de la terminaison To est n, Collection<Ref<T>> est retourné.
Exemple :
SELECT a.AddressID, (SELECT VALUE EREF(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
Entité 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 :
Nom |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
SELECT
Entité 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 |