Aracılığıyla paylaş


Veri erişimcisi işlevleri - data (XQuery)

Şunlar için geçerlidir: SQL Server

$arg tarafından belirtilen her öğe için yazılan değeri döndürür.

Sözdizimi

fn:data ($arg as item()*) as xdt:untypedAtomic*

Arguments

$arg

Türü belirtilen değerler döndürülen öğelerin sırası.

Açıklamalar

Aşağıdaki önemli noktalar, yazılan değerler için geçerlidir:

  • Bir atomik değerin türü, atomik değerdir.

  • Metin düğümünün yazılan değeri, metin düğümünün dize değeridir.

  • Açıklamanın yazılan değeri, açıklamanın dize değeridir.

  • bir işleme yönergesinin türü, işleme yönergesi hedef adı olmadan işleme yönergesinin içeriğidir.

  • Belge düğümünün yazılan değeri, dize değeridir.

Öznitelik ve öğe düğümleri için aşağıdaki önemli noktalar geçerlidir:

  • Bir öznitelik düğümü XML şema türüyle yazıldıysa, türü belirtilen değer buna göre yazılan değerdir.

  • Öznitelik düğümü yazılmamışsa, türü belirtilen değeri, örneği xdt:untypedAtomicolarak döndürülen dize değerine eşittir.

  • Öğe düğümü yazılmamışsa, türü belirtilen değeri, örneği xdt:untypedAtomicolarak döndürülen dize değerine eşittir.

Aşağıdaki önemli noktalar, yazılan öğe düğümleri için geçerlidir:

  • Öğenin basit bir içerik türü varsa, data() öğesinin yazılan değerini döndürür.

  • Düğüm, xs:anyType gibi karmaşık türdeyse statik data() bir hata döndürür.

aşağıdaki örneklerde gösterildiği gibi işlevinin kullanılması data() sık sık isteğe bağlı olsa da, işlevin data() belirtilmesi sorgu okunabilirliğini açıkça artırır. Daha fazla bilgi için bkz. XQuery Temel Bilgileri.

Aşağıdaki örnekte gösterildiği gibi, oluşturulan XML'de belirtemezsiniz data() :

DECLARE @x AS XML;

SET @x = '';

SELECT @x.query('data(<SomeNode>value</SomeNode>)');

Örnekler

Bu makalede AdventureWorks veritabanındaki çeşitli xml türü sütunlarında depolanan XML örneklerine karşı XQuery örnekleri sağlanmaktadır.

A. Bir düğümün türlenmiş değerini ayıklamak için data() XQuery işlevini kullanın

Aşağıdaki sorgu özniteliğin data() , öğenin ve metin düğümünün değerlerini almak için işlevinin nasıl kullanıldığını gösterir:

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query(N'
 for $pd in //p1:ProductDescription
 return
    <Root
      ProductID = "{ data( ($pd//@ProductModelID)[1] ) }"
      Feature =   "{ data( ($pd/p1:Features/wm:Warranty/wm:Description)[1] ) }" >
    </Root>
 ') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;

Sonuç şu şekildedir:

<Root ProductID="19" Feature="parts and labor"/>

Belirtildiği gibi, data() öznitelikleri oluştururken işlev isteğe bağlıdır. İşlevi data() belirtmezseniz, örtük olarak varsayılır. Aşağıdaki sorgu, önceki sorguyla aynı sonuçları üretir:

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
      for $pd in //p1:ProductDescription
         return
          <Root
                ProductID = "{ ($pd/@ProductModelID)[1] }"
                Feature =   "{ ($pd/p1:Features/wm:Warranty/wm:Description)[1] }" >
           </Root>
 ') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;

Aşağıdaki örneklerde işlevin data() gerekli olduğu örnekler gösterilmiştir.

Aşağıdaki sorguda öğesini $pd/p1:Specifications/Material döndürür <Material> . Ayrıca, data($pd/p1:Specifications/ Material) olarak yazılan xdt:untypedAtomickarakter verilerini döndürür çünkü <Material> yazılmamıştır. Girişin türü kaldırıldığında sonucu data() olarak xdt:untypedAtomicyazılır.

SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
      for $pd in //p1:ProductDescription
         return
          <Root>
             { $pd/p1:Specifications/Material }
             { data($pd/p1:Specifications/Material) }
           </Root>
 ') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;

Sonuç şu şekildedir:

<Root>
  <Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>

Aşağıdaki sorguda, data($pd/p1:Features/wm:Warranty) karmaşık bir tür öğesi olduğundan <Warranty> statik bir hata döndürür.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
 <Root>
   {     /p1:ProductDescription/p1:Features/wm:Warranty }
   { data(/p1:ProductDescription/p1:Features/wm:Warranty) }
 </Root>
 ') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 23;