Aracılığıyla paylaş


veri işlev (XQuery)

Her madde tarafından belirtilen yazılı değerini döndürür $arg.

Sözdizimi

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

Bağımsız değişkenler

  • $arg
    Yazılan değerleri döndürülür öğelerin sırası.

Açıklamalar

Aşağıda yazılı değerler geçerlidir:

  • Yazılı bir atomik değerinin atomik değeri değeridir.

  • Yazılı bir metin düğümü metin düğümü dize değeri değeridir.

  • Yorum yazılan yorum dize değeri değeridir.

  • Yazılı bir işlem yönergesi işleme yönergesi, işleme yönergesi hedef adı olmadan içeriği değeridir.

  • Yazılı belge düğümü dize değeri değeridir.

Aşağıdaki özniteliği ve öğe düğümleri için geçerlidir:

  • Bir xml şema türü öznitelik düğümü yazdıysanız, yazılı değeri yazılmış, buna göre değerdir.

  • Bir öznitelik düğümü yazılmamış ise, yazılı değeri bir örneği olarak döndürülen dize değeri eşittir xdt: untypedAtomic.

  • Bir eleman düğümü yazılan değil, yazılı değeri bir örneği olarak döndürülen dize değeri eşittir xdt: untypedAtomic.

Aşağıda yazılı öğesi düğümleri için geçerlidir:

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

  • Xs: anyType, dahil olmak üzere karmaşık tür düğümse data() statik hata verir.

Her ne kadar kullanarak data() belirterek, aşağıdaki örnekte gösterildiği gibi işlev sık isteğe bağlı, data() işlevi açıkça sorgu okunabilirliği artırır. Daha fazla bilgi için, bkz. XQuery temelleri.

Belirttiğiniz olamaz data() üzerinde aşağıdaki gösterildiği gibi xml, inşa:

declare @x xml
set @x = ''
select @x.query('data(<SomeNode>value</SomeNode>)')

declare @x xml
set @x = ''
select @x.query('data(<SomeNode>value</SomeNode>)')

Örnekler

Bu konu çeşitli depolanan xml örnekleri karşı XQuery örnekler sağlar xml AdventureWorks veritabanındaki sütunları yazın. Bu sütunlar genel bakış için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.

A.Yazılı değerinin bir düğüm data() XQuery işlevini kullanma

Aşağıdaki sorgu gösterir nasıl data() işlevi bir öznitelik, öğe ve metin düğümü değerleri almak için kullanılı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(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

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ç şudur:

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

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

Belirtildiği gibi data() işlevi olduğu isteğe bağlı öznitelikleri yapılandırırlar. Eğer belirtmezseniz data() işlevi, bu dolaylı olarak varsayılır. Aşağıdaki sorgu önceki sorgu 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

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

Hangi durumlarda aşağıdaki örneklerde gösterilmektedir data() işlevi gereklidir.

Aşağıdaki sorgu, $pd / p1:Specifications / malzeme döner <Material> öğesi. Ayrıca, data($pd/p1:Specifications/ Material) döner karakter veri xdt: untypedAtomic, yazdığınız çünkü <Material> yazılmamış olduğunu. Ne zaman giriş yazılmamış, sonucunu data() olarak yazılan xdt: untypedAtomic.

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

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ç şudur:

<Root>
  <Material>Almuminum Alloy</Material>Almuminum Alloy
</Root>

<Root>
  <Material>Almuminum Alloy</Material>Almuminum Alloy
</Root>

Aşağıdaki sorgu, data($pd/p1:Features/wm:Warranty) bir statik hata verir çünkü <Warranty> bir karmaşık tür öğedir.

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

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

Ayrıca bkz.

Başvuru

Xml veri türü karşı XQuery işlevleri