Geometrik Tasarımlı bir yol ifadesi adım belirtme
Bir eksen adımda yol ifade aşağıdaki bileşenleri içerir:
Daha fazla bilgi için bkz: Yol ifadeleri (XQuery).
XQuery uygulamasında SQL Server aşağıdaki eksen adımları destekler
Eksen |
Açıklama |
---|---|
alt |
Alt bağlam düğümün döndürür. |
alt |
Tüm içerik düðümünün altlarý döndürür. |
üst |
İçerik düðümünün döndürür. |
Öznitelik |
Öznitelikler içerik düðümünün döndürür. |
SELF (KENDİ) |
Bağlam düğümün döndürür. |
alt veya kendini |
İçerik düğümü ve tüm içerik düðümünün altlarý döndürür. |
Bu eksenler dışında ana eksen, ileriye doğru eksenleri gerekir.The parent axis is a reverse axis, because it searches backward in the document hierarchy.Örneğin, göreli yol ifade child::ProductDescription/child::Summary iki adımı vardır ve her adımı belirtir bir child eksen.İlk adım alır <ProductDescription> öğesi alt bağlam düğümün.Her <ProductDescription> ikinci adımı öğe düğümü alır <özeti> öğe düğümü alt öğesi.
Göreli yol ifade child::root/child::Location/attribute::LocationID, var. üç adımlarıİlk iki adımı belirtmek her bir child eksen, üçüncü adımı belirtir ve attribute eksen.Üretim yönergeleri karşı xml belgelerinde çalıştırıldığında Production.ProductModel tablo, ifade verir LocationID öznitelik <yere> öğe düğümü alt öğesi <kök> öğesi.
Örnekler
Bu konudaki sorgu örnekleri karşı belirtilen xml sütunları yazın AdventureWorks2008R2 veritabanı.Bu sütunları hakkında daha fazla bilgi için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.
A.Alt eksen belirtme
Belirli bir ürün modeline için aşağıdaki sorgu alır <Özellikler> , düğümü alt öğesi <ProductDescription> Ürün Katalog açıklamasından depolanan öğe düğümü Production.ProductModel tablo.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features')
FROM Production.ProductModel
WHERE ProductModelID=19
Önceki sorgudan aşağıdakilere dikkat edin:
The query() method of the xml data type specifies the path expression.
Her iki adımda yol ifade belirtin bir child eksen ve düğüm adları ProductDescription ve Features, farklı düğüm sınamaları.Düğüm sınama hakkında daha fazla bilgi için bkz: Düğüm sınaması bir yol ifadesi adım belirtme.
B.Alt ve alt veya kendini eksenleri belirtme
Aşağıdaki örnek, alt ve alt veya kendini eksenleri kullanır.Bu örnekte sorgu karşı belirtilen bir xml türü değişkeni.xml örnekni kolayca oluşturulan farkı göstermek için Basitleştirilmiş sonuçlar.
declare @x xml
set @x='
<a>
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
</a>'
declare @y xml
set @y = @x.query('
/child::a/child::b
')
select @y
ifade aşağıdaki sonucu verir <b> öğe düğümü alt öğesi <a> öğe düğümü:
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
Alt öğesi belirtirseniz, bu ifadede, eksen yol ifade
/child::a/child::b/descendant::*, tüm altlarý için sizden <b> öğe düğümü.
Yıldız işareti (*) düğüm sınama düğüm sınaması düğüm adını temsil eder.Bu nedenle, döndürülen düğümleri türleri öğe düğümü alt eksen birincil düğüm türünü belirler.Diğer bir deyişle, tüm öğe düğümleri ifade verir...Metin düğümleri döndürülür.Birincil düğüm türü ve düðüm sýnamasý ile ilişkisini hakkında daha fazla bilgi için bkz: Düğüm sınaması bir yol ifadesi adım belirtme konu.
Öğe düğümleri <c> ve <d> aşağıdaki sonucu gösterildiği gibi döndürülür:
<c>text2
<d>text3</d>
</c>
<d>text3</d>
Bir alt-veya-self belirtirseniz, eksen yerine, alt eksen, /child::a/child::b/descendant-or-self::* bağlam düğümün döndürür öğe <b>ve onun alt.
Bu sonucu verir:
<b>text1
<c>text2
<d>text3</d>
</c>
</b>
<c>text2
<d>text3</d>
</c>
<d>text3</d>
Aşağıdaki örnek sorgu karşı AdventureWorks2008R2 veritabanı tüm alt öğe düğümlerini alır <Features> öğesinin alt öğesi <ProductDescription> öğesi:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features/descendant::*
')
FROM Production.ProductModel
WHERE ProductModelID=19
C.Ana eksen belirtme
Aşağıdaki sorgu döndürür <Summary> öğesinin alt öğesi <ProductDescription> Ürün Katalog xml belgesinde öğe saklanan Production.ProductModel tablo.
Bu örnek kullanır üst eksen üst için geri dönmek için <Feature> öğesi ve Al <Summary> öğesinin alt öğesi <ProductDescription> öğesi.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/child::PD:ProductDescription/child::PD:Features/parent::PD:ProductDescription/child::PD:Summary
')
FROM Production.ProductModel
WHERE ProductModelID=19
Bu sorgu örnekte yol ifade kullanan parent eksen.Ana eksen olmadan ifade aşağıdaki gösterildiği gibi yeniden yazabilirsiniz:
/child::PD:ProductDescription[child::PD:Features]/child::PD:Summary
Daha kullanışlı bir örnek üst eksen aşağıdaki örnekte verilmiştir.
Depolanan her ürün modeli katalog açıklamasını CatalogDescription sütunu ProductModel tablo olan bir <ProductDescription> olan öğe ProductModelID öznitelik ve <Features> alt öğe, aşağıdaki parçasında gösterildiği gibi:
<ProductDescription ProductModelID="..." >
...
<Features>
<Feature1>...</Feature1>
<Feature2>...</Feature2>
...
</ProductDescription>
Sorgu bir yineleyici değişken ayarlar $f, alt öğesi olarak dönmek için flwor deyim içinde <Features> öğesi.Daha fazla bilgi için bkz: flwor deyimi ve yineleme (XQuery).Her özellik için return aşağıdaki biçimde bir xml yan tümce tümce tümce oluşturur:
<Feature ProductModelID="...">...</Feature>
<Feature ProductModelID="...">...</Feature>
Eklemek için ProductModelID her <Feature> öğesi, parent eksen belirtilir:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";
for $f in /child::PD:ProductDescription/child::PD:Features/child::*
return
<Feature
ProductModelID="{ ($f/parent::PD:Features/parent::PD:ProductDescription/attribute::ProductModelID)[1]}" >
{ $f }
</Feature>
')
FROM Production.ProductModel
WHERE ProductModelID=19
Bu kısmi bir sonucudur:
<Feature ProductModelID="19">
<wm:Warranty
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
</Feature>
<Feature ProductModelID="19">
<wm:Maintenance
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:NoOfYears>10 years</wm:NoOfYears>
<wm:Description>maintenance contract available through your dealer
or any Adventure Works retail store.</wm:Description>
</wm:Maintenance>
</Feature>
<Feature ProductModelID="19">
<p1:wheel
xmlns:p1="https://www.adventure-works.com/schemas/OtherFeatures">
High performance wheels.
</p1:wheel>
</Feature>
Dikkat yüklemi [1] , yol ifade tek değer döndürülür sağlamak için eklenir.