Entity SQL 快速参考
本主题提供实体 SQL 查询的快速参考。 本主题中的查询基于 AdventureWorks 销售模型。
文本
String
字符串分为 Unicode 字符串和非 Unicode 字符串。 非 Unicode 字符串前面附有 N。例如,N'hello'
。
下面是非 Unicode 字符串的示例:
'hello'
--same as
"hello"
输出:
值 |
---|
hello |
DateTime
在日期时间文本中,日期部分和时间部分是必须存在的。 这里没有默认值。
示例:
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
输出:
值 |
---|
12/25/2006 1:01:00 AM |
Integer
整数文本可以为 Int32 (123)、UInt32 (123U)、Int64 (123L) 和 UInt64 (123UL) 类型。
示例:
--a collection of integers
{1, 2, 3}
输出:
值 |
---|
1 |
2 |
3 |
其他
实体 SQL 支持的其他文字为、Guid、二进制、浮点/双精度型、十进制和 null
。 实体 SQL 中的 null 文本视为与概念模型中的每一种其他类型兼容。
类型构造函数
ROW
ROW 构造一个匿名的结构化类型(记录)值,如下所示:ROW(1 AS myNumber, 'Name' AS myName).
示例:
SELECT VALUE row (product.ProductID AS ProductID, product.Name
AS ProductName) FROM AdventureWorksEntities.Product AS product
输出:
ProductID | 名称 |
---|---|
1 | Adjustable Race |
879 | All-Purpose Bike Stand |
712 | AWC Logo Cap |
[.] | [.] |
MULTISET
MULTISET 构造集合,如:
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 | 名称 | ProductNumber | " |
---|---|---|---|
842 | Touring-Panniers, Large | PA-T100 | " |
对象
命名类型构造函数 构造(已命名的)用户定义对象,如 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 创建对实体类型实例的引用。 例如,下面的查询返回对 Orders 实体集中每一个 Order 实体的引用:
SELECT REF(o) AS OrderID FROM Orders AS o
输出:
值 |
---|
1 |
2 |
3 |
[.] |
下面的示例使用属性提取运算符 (.) 访问实体的属性。 在使用属性提取运算符时,引用将自动被反引用。
示例:
SELECT VALUE REF(p).Name FROM
AdventureWorksEntities.Product AS p
输出:
值 |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
[.] |
DEREF
DEREF 反引用一个引用值,并生成该反引用的结果。 例如,下面的查询生成 Orders 实体集中每一个 Order 的 Order 实体: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 |
[.] |
函数
Canonical
规范函数的命名空间为 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 |
特定于 Microsoft 提供程序
特定于 Microsoft 提供程序的函数位于 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 |
分页
可以通过在 ORDER BY 子句中声明 SKIP 和 LIMIT 子子句来表示分页。
示例:
SELECT c.ContactID as ID, c.LastName AS Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
输出:
ID | 名称 |
---|---|
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 接受限定为 <namespace>.<relationship type name>的关系类型。 如果结束端的基数为 1,导航将返回 Ref<T>。 如果结束端的基数为 n,将返回 Collection<Ref<T>>。
示例:
SELECT a.AddressID, (SELECT VALUE DEREF(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
实体 SQL 提供了 SELECT VALUE 子句以跳过隐式行构造。 SELECT VALUE 子句中只能指定一项。 在使用这样的子句时,将不会对 SELECT 子句中的项构造行包装器,并且可生成所要形状的集合,例如:SELECT VALUE a
。
示例:
SELECT VALUE p.Name FROM AdventureWorksEntities.Product AS p
输出:
名称 |
---|
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:
名称 | ProductID |
---|---|
Adjustable Race | 1 |
All-Purpose Bike Stand | 879 |
AWC Logo Cap | 712 |
[.] | [.] |
CASE 表达式
CASE 表达式计算一组布尔表达式的值以确定结果。
示例:
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
输出:
值 |
---|
TRUE |