本主题提供对实体 SQL 查询的快速引用。 本主题中的查询基于 AdventureWorks Sales 模型。
文本
字符串
字符串分为 Unicode 字符串和非 Unicode 字符串。 Unicode 字符串前面加上 N。例如, N'hello'.
下面是非 Unicode 字符串的示例:
'hello'
--same as
"hello"
输出:
| 价值 |
|---|
| 你好 |
DateTime
在 DateTime 文本中,日期和时间部分都是强制性的。 没有默认值。
示例:
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
输出:
| 价值 |
|---|
| 2006/12/25 上午 1:01:00 |
整数
整数文本的类型可以是 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(1 AS myNumber, 'Name' AS myName).
示例:
SELECT VALUE row (product.ProductID AS ProductID, product.Name
AS ProductName) FROM AdventureWorksEntities.Product AS product
输出:
| ProductID | 名称 |
|---|---|
| 1 | 可调整比赛 |
| 879 | All-Purpose 自行车停放架 |
| 712 | AWC 徽标帽 |
| ... | ... |
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 | 名称 | 产品编号 | … |
|---|---|---|---|
| 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 | 运输跟踪号 | 订单数量 | ProductID | ... |
|---|---|---|---|---|
| 1 | 4911-403C-98 | 1 | 776 | ... |
| 2 | 4911-403C-98 | 3 | 777 | ... |
| ... | ... | ... | ... | ... |
参考文献
裁判
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
输出:
| 价值 |
|---|
| 可调整比赛 |
| All-Purpose 自行车停放架 |
| AWC 徽标帽 |
| ... |
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
输出:
| 价值 |
|---|
| 可调整比赛 |
| All-Purpose 自行车停放架 |
| AWC 徽标帽 |
| ... |
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 |
特定于 Microsoft 提供程序
特定于 Microsoft 提供程序的函数位于 SqlServer 命名空间中。
示例:
SELECT SqlServer.LEN(c.EmailAddress) AS EmailLen FROM
AdventureWorksEntities.Contact AS c WHERE
c.ContactID BETWEEN 10 AND 12
输出:
| EmailLen |
|---|
| 二十七 |
| 二十七 |
| 26 |
命名空间
USING 指定查询表达式中使用的命名空间。
示例:
using SqlServer; LOWER('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;
输出:
| 身份证件 | 名称 |
|---|---|
| 10 | Adina |
| 11 | 阿格考伊里 |
| 12 | Aguilar |
分组
GROUPING BY 指定要放置查询 (SELECT) 表达式返回的对象的组。
示例:
SELECT VALUE name FROM AdventureWorksEntities.Product AS P
GROUP BY P.Name HAVING MAX(P.ListPrice) > 5
输出:
| 姓名 |
|---|
| LL Mountain Seat Assembly |
| ML Mountain Seat Assembly |
| HL Mountain Seat Assembly |
| ... |
导航
关系导航运算符用于导航从一个实体(起始端)到另一个实体(结束端)的关系。 NAVIGATE 采用关系类型,该类型限定为 <命名空间>。<关系类型名称>。 如果结束端的基数为 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
输出:
| 名称 |
|---|
| 可调整比赛 |
| All-Purpose 自行车停放架 |
| AWC 徽标帽 |
| ... |
选择
实体 SQL 还提供用于构造任意行的行构造函数。 SELECT 采用投影中的一个或多个元素,并生成包含字段的数据记录,例如: SELECT a, b, c
示例:
SELECT p.Name,p.ProductID FROM AdventureWorksEntities.Product 作为 p 输出:
| 名称 | ProductID |
|---|---|
| 可调整比赛 | 1 |
| All-Purpose 自行车停放架 | 879 |
| AWC 徽标帽 | 712 |
| ... | ... |
CASE 表达式
事例表达式计算一组布尔表达式以确定结果。
示例:
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
输出:
| 价值 |
|---|
| 真 |