Aracılığıyla paylaş


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.