Поделиться через


Краткий справочник по языку Entity SQL

В этом разделе содержится краткий справочник по запросам Entity SQL. Запросы, описанные в этом разделе, основаны на модели AdventureWorks Sales.

Литералы

Строковые

Существуют строковые литералы в Юникоде и не в Юникоде. Строки не в Юникоде предваряются символом N. Например: N'hello'.

Ниже приведен пример строкового литерала в Юникоде:

'hello'
--same as
"hello"

Вывод:

Значение

hello

DateTime

В литералах DateTime обязательными являются и часть даты, и часть времени. Значения по умолчанию отсутствуют.

Пример.

DATETIME '2006-12-25 01:01:00.000' 
--same as
DATETIME '2006-12-25 01:01'

Вывод:

Значение

25.12.2006 01:01:00

Целочисленные

Целочисленные литералы могут иметь тип Int32 или Int64.

Пример.

--a collection of integers
{1, 2, 3}

Вывод:

Значение

1

2

3

Другие

Язык Entity SQL поддерживает и другие типы литералов — Guid, Binary, Float/Double, Decimal и null. Литералы null в Entity SQL считаются совместимыми с любым из других типов модели EDM.

Конструкторы типов

ROW

Конструктор ROW (Entity SQL) создает анонимное значение (запись) со структурной типизацией, как показано в следующем примере: ROW(1 AS myNumber, ‘Name’ AS myName).

Пример.

SELECT VALUE row (product.ProductID as ProductID, product.Name 
    as ProductName) FROM AdventureWorksEntities.Product AS product

Вывод:

ProductID Name

1

Adjustable Race

879

All-Purpose Bike Stand

712

AWC Logo Cap

...

...

MULTISET

Конструктор MULTISET (язык Entity SQL) создает коллекции, например, следующим образом:

MULTISET(1,2,2,3)``--same as-{1,2,2,3}.

Пример.

SELECT VALUE product FROM AdventureWorksEntities.Product AS product WHERE product.ListPrice IN MultiSet (125, 300)

Вывод:

ProductID Name ProductNumber

842

Touring-Panniers, Large

PA-T100

Object

Конструктор Конструктор именованного типа (язык Entity SQL) создает определяемые пользователем (именованные) объекты, например person("abc", 12).

Пример.

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

Вывод:

SalesOrderDetailID CarrierTrackingNumber OrderQty ProductID

1

4911-403C-98

1

776

2

4911-403C-98

3

777

...

...

...

...

Ссылки

REF

Оператор REF создает ссылку на экземпляр типа сущности. Например, следующий запрос возвращает ссылки на каждую сущность Order в наборе сущностей Orders: select ref(o) from LOB.Orders as o. В следующем примере используется оператор извлечения свойства (.) для доступа к свойству сущности. При использовании этого оператора автоматически выполняется разыменование ссылки.

Пример.

SELECT VALUE REF(p).Name FROM 
    AdventureWorksEntities.Product as p

Вывод:

Значение

Adjustable Race

All-Purpose Bike Stand

AWC Logo Cap

...

DEREF

Оператор DEREF разыменовывает значение ссылки и возвращает результат разыменования. Например, следующий запрос возвращает сущности Order для каждой записи Order в наборе сущностей Orders: select deref(o2.r) from (select ref(o) as r from LOB.Orders as o) as o2.

Пример.

SELECT VALUE DEREF(REF(p)).Name FROM 
    AdventureWorksEntities.Product as p

Вывод:

Значение

Adjustable Race

All-Purpose Bike Stand

AWC Logo Cap

...

CREATEREF и KEY

Оператор CREATEREF создает ссылку, передавая ключ. Оператор KEY извлекает ключевую часть из выражения со ссылкой на тип.

Пример.

SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID))) 
    FROM AdventureWorksEntities.Product as p

Вывод:

ProductID

980

365

771

...

Функции

Канонические

Доступ к каноническим функциям производится через пространство имен Edm, например Edm.Length("string"). Если не импортировано другое пространство имен, содержащее функцию, имя которой совпадает с именем канонической функции, то указывать пространство имен не обязательно. Если в двух пространствах имен имеется функция с тем же именем, то пользователь должен указать полное имя функции.

Пример.

SELECT Length(c. FirstName) As NameLen FROM 
    AdventureWorksEntities.Contact AS c 
    WHERE c.ContactID BETWEEN 10 AND 12

Вывод:

NameLen

6

6

5

Функции поставщиков данных (Майкрософт)

Функции поставщиков данных (Майкрософт) находятся в пространстве имен SqlServer.

Пример.

SELECT SqlServer.LEN(c.EmailAddress) As EmailLen FROM 
    AdventureWorksEntities.Contact AS c WHERE 
    c.ContactID BETWEEN 10 AND 12

Вывод:

EmailLen

27

27

26

Пространства имен

Оператор USING задает пространства имен, используемые в выражении запроса.

Пример.

using SqlServer; LOWER('AA');

Вывод:

Значение

aa

Разбиение на страницы

Разбиение на страницы можно выразить, задав объявления вложенных предложений SKIP и LIMIT в предложении ORDER BY (язык Entity SQL).

Пример.

SELECT c.ContactID as ID, c.LastName as Name FROM 
    AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;

Вывод:

ID Name

10

Adina

11

Agcaoili

12

Aguilar

Группирование

Ключевое слово GROUPING BY определяет группы, в которые должны быть помещены объекты, возвращаемые выражением запроса (SELECT).

Пример.

SELECT VALUE name FROM AdventureWorksEntities.Product as P 
    GROUP BY P.Name HAVING MAX(P.ListPrice) > 5

Вывод:

name

LL Mountain Seat Assembly

ML Mountain Seat Assembly

HL Mountain Seat Assembly

...

Навигация

Оператор навигации по связям позволяет переходить по связям от одной сущности (исходный элемент) к другой (конечный элемент). Оператор NAVIGATE принимает в качестве аргумента тип связи, заданный в формате <пространство_имен>.<имя_типа_связи>. Если число элементов в конечной составляющей связи равно 1, то оператор Navigate возвращает значение Ref<T>. Если это количество элементов равно n, то возвращается значение Collection<Ref<T>>.

Пример.

SELECT a.AddressID, (SELECT VALUE EREF(v) FROM 
    NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v) 
    FROM AdventureWorksEntities.Address AS a

Вывод:

AddressID

1

2

3

...

SELECT VALUE и SELECT

SELECT VALUE

Язык Entity SQL поддерживает предложение SELECT VALUE, позволяющее пропустить неявное конструирование строки. В предложении SELECT VALUE может быть указан только один элемент. При использовании такого предложения для элементов в предложении SELECT оболочка строк не создается, что позволяет получить коллекцию необходимой формы, например: SELECT VALUE a.

Пример.

SELECT VALUE p.Name FROM AdventureWorksEntities.Product as p

Вывод:

Name

Adjustable Race

All-Purpose Bike Stand

AWC Logo Cap

...

SELECT

Язык Entity SQL поддерживает также конструктор строк, позволяющий создавать произвольные строки. Предложение SELECT принимает один или несколько элементов в проекции и возвращает запись данных с полями, например: SELECT a, b, c.

Пример.

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

...

...

Выражение варианта выбора

Выражение варианта выбора для определения результата вычисляет набор логических выражений.

Пример.

CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END

Вывод:

Значение

TRUE

См. также

Основные понятия

Справочник по Entity SQL
Общие сведения о языке Entity SQL