模組和初構 - XQuery Prolog
適用於:SQL Server
XQuery 查詢是由初構和本文所組成。 XQuery 初構是一系列宣告和定義,共同建立查詢處理的必要環境。 在 SQL Server 中,XQuery 初構可以包含命名空間宣告。 XQuery 主體是由指定預定查詢結果的運算式序列所組成。
例如,下列 XQuery 是針對 XML 類型的指令資料行所指定,該資料行 會將製造指令儲存為 XML。 查詢會擷取工作中心位置 10
的製造指示。 query()
xml 資料類型的 方法可用來指定 XQuery。
SELECT Instructions.query('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/AWMI:root/AWMI:Location[@LocationID=10]
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
請注意下列項目是從上一個查詢而來:
XQuery 初構包含命名空間前置詞 (AWMI) 宣告 。
(namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
declare namespace
關鍵字會定義稍後在查詢主體中使用的命名空間前置詞。/AWMI:root/AWMI:Location[@LocationID="10"]
是查詢主體。
命名空間宣告
命名空間宣告會定義前置詞,並將它與命名空間 URI 產生關聯,如下列查詢所示。 在查詢中, CatalogDescription
是 xml 類型資料行。
在針對此資料行指定 XQuery 時,查詢初構會 declare namespace
指定宣告,以將前置 PD
詞 、產品描述與命名空間 URI 產生關聯。 然後,此前置詞會用於查詢主體中,而不是命名空間 URI。 產生的 XML 中的節點位於與命名空間 URI 相關聯的命名空間中。
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
where ProductModelID=19
若要改善查詢可讀性,您可以使用 WITH XMLNAMESPACES 來宣告命名空間,而不是使用 declare namespace
在查詢初構中宣告前置詞和命名空間系結。
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD)
SELECT CatalogDescription.query('
/PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
where ProductModelID=19
如需詳細資訊,請參閱 使用 WITH XMLNAMESPACES 將命名空間新增至查詢。
預設命名空間宣告
您可以使用 declare default element namespace
宣告來系結專案名稱的預設命名空間,而不是使用 declare namespace
宣告來宣告命名空間前置詞。 在此情況下,您不會指定任何前置詞。
在下列範例中,查詢主體中的路徑運算式不會指定命名空間前置詞。 根據預設,所有專案名稱都屬於 prolog 中指定的預設命名空間。
SELECT CatalogDescription.query('
declare default element namespace "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/ProductDescription/Summary
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19
您可以使用 WITH XMLNAMESPACES 來宣告預設命名空間:
WITH XMLNAMESPACES (DEFAULT 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription')
SELECT CatalogDescription.query('
/ProductDescription/Summary
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19