Entity SQL 快速參考
本主題提供 實體 SQL 查詢的快速參考。本主題的範例是以 AdventureWorks Sales Model 為基礎。
常值
字串
字串常值包括 Unicode 和非 Unicode 字元兩種。非 Unicode 字串前面會加一個 N。例如 N'hello'
。
以下是 Unicode 字串常值的範例:
'hello'
--same as
"hello"
輸出:
值 |
---|
hello |
DateTime
在 DateTime 常值中,日期和時間兩者都是必要項。沒有預設值。
範例:
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
輸出:
值 |
---|
12/25/2006 1:01:00 AM |
整數
整數常值可以是 Int32 或 Int64 型別。
範例:
--a collection of integers
{1, 2, 3}
輸出:
值 |
---|
1 |
2 |
3 |
其他
實體 SQL 支援的其他常值包括 Guid、二進位、浮點數/雙精度浮點數、十進位和 null。實體 SQL 中的 Null 常值視同與 Entity Data Model (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 會建立實體類型執行個體的參考。例如,以下查詢會傳回 Orders 實體集中每一個 Order 實體的參考: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 會對參考值取值並且產生該取值的結果。例如,以下查詢會對 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 |
... |
函式
標準
標準函式的命名空間為 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 |
分頁
分頁可以利用宣告 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 接受限定為 <namespace>.<relationship type name> 的關聯性型別。如果結束端的基數為 1,巡覽會傳回 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
實體 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
實體 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 運算式
CASE 運算式會評估一組布林運算式來判斷結果。
範例:
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
輸出:
值 |
---|
TRUE |