Aracılığıyla paylaş


XQuery giriş

Bir XQuery sorgu, bir önsöz ve bir gövdeden oluşur. XQuery giriş tanımlamalar ve birlikte sorgu işleme için gerekli ortamı tanımları dizisidir. SQL Server'da XQuery giriş ad alanı bildirimi içerebilir. XQuery gövde istenen sorgu sonucu belirtin deyimleri dizisi oluşur.

Örneğin, aşağıdaki XQuery karşı yönergeleri sütun belirtilen xml üretim yönergeleri xml olarak depolayan türü. Üretim yönergeleri için iş merkezi konumda sorgu alır 10. query()Yöntemi xml veri türü XQuery belirtmek için kullanılır.

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

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

Önceki sorgudan aşağıdakilere dikkat edin:

  • Bir ad alanı öneki (AWMI) bildirimi XQuery giriş içerir (namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.

  • declare namespaceAnahtar kelime, daha sonra sorgu gövdesi içinde kullanılan bir ad alanı önekini tanımlar.

  • /AWMI:root/AWMI:Location[@LocationID="10"]Sorgu gövde var.

Namespace bildirimleri

Bir ad alanı bildirimi bir önek tanımlar ve aşağıdaki sorgu gösterildiği gibi bir ad alanı URI ile ilişkilendirir. Sorgu, CatalogDescriptionolan bir xml sütun türü.

XQuery karşı bu sütun belirtme de sorgu giriş belirtir declare namespacebildiriminin önekini ilişkilendirmek için PD, ad alanı URI ile ürün açıklaması. Bu önek, sonra ad alanı URI yerine sorgu gövdesi içinde kullanılır. Sonuç XML ad alanı URI ile ilişkilendirilmiş ad düğümlerdir.

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

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

Sorgu Okunabilirliği artırmak için ad alanı öneki ve ad bağlama sorgu giriş olarak kullanarak bildirmek yerine WITH xmlnamespaces kullanarak bildirebilirsiniz 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 ('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

Daha fazla bilgi için bkz: İle sorguları WITH xmlnamespaces NameSpaces eklemek.

Varsayılan Namespace bildirimi

Ad alanı önekini kullanarak yerine declare namespacebildirimi, sen-ebilmek kullanma declare default element namespacebağlamak için öğe adlarını varsayılan ad alanı bildirimi. Bu durumda, herhangi bir önek belirtmeyin.

Aşağıdaki örnek, sorgu gövdesi yol ifadesi ad alanı önekini belirtin. Varsayılan olarak, tüm öğe adlarının önsöz'de belirtilen varsayılan ad alanına ait.

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 

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 kullanarak varsayılan bir ad alanı bildirebilirsiniz:

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 

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 

Ayrıca bkz.

Kavramlar

İle sorguları WITH xmlnamespaces NameSpaces eklemek