Entity SQL 快速參考
本主題提供 Entity SQL 查詢的快速參考。 本主題的範例是以 AdventureWorks Sales Model 為基礎。
常值
String
字串常值包括 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 (123)、UInt32 (123U)、Int64 (123L) 和 UInt64 (123UL)。
範例:
--a collection of integers
{1, 2, 3}
輸出:
值 |
---|
1 |
2 |
3 |
其他
Entity SQL 支援的其他常值包括 Guid、二進位、浮點數/雙精度浮點數、十進位和 null
。 Entity 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 |
Object
具名類型建構函式會建構 (具名) 使用者定義物件,例如 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 會對參考值取值 (Dereference),並且產生該取值的結果。 例如,以下查詢會對 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 |
分頁
將 SKIP 和 LIMIT 次子句宣告為 ORDER BY 子句,即可表示分頁。
範例:
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
Entity 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 |