Veri işlev (XQuery)
Yazılı değeri tarafından belirtilen her öğe için verir $arg.
Sözdizimi
fn:data ($arg as item()*) as xdt:untypedAtomic*
Bağımsız değişkenler
- $arg
Yazılı değerleri döndürülen öğe sırası.
Açıklamalar
Girilen değerleri için geçerlidir:
Yazılı bir Atomik değerinin Atomik Değer değerdir.
Yazılı bir metin düğümü metin düğümü dize değeri değeridir.
Yazılı bir açıklama açıklamanın 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ı bir belge düğümü dize değeri değeridir.
öznitelik ve öğe düğümleri için geçerlidir:
Bir xml şema türü ile bir öznitelik düğümü yazdıysanız, yazılı değeri yazılı, buna göre değerdir.
Öznitelik düğümü untyped yazılı değeri örnek olarak döndürülen dize değeri eşit ise, xdt:untypedAtomic.
Öğe düğümü yazılı, yazılı değeri örnek olarak döndürülen dize değeri eşittir xdt:untypedAtomic.
Yazılı öğe düğümleri için geçerlidir:
Basit bir içerik türü öğesi varsa, data() yazılı öğenin değerini döndürür.
Xs:anyType, dahil olmak üzere karmaşık tür düğümse data() statik hata verir.
Kullanarak rağmen data() işlev belirterek aşağıdaki örneklerde gösterildiği gibi sık sık isteğe bağlı data() işlev açıkça sorgu okunabilirliği artırır.Daha fazla bilgi için bkz: XQuery temelleri.
Belirttiğiniz olamaz data() üzerinde xml aşağıdaki gösterildiği gibi oluşturulur:
declare @x xml;
set @x = '';
select @x.query('data(<SomeNode>value</SomeNode>)');
Örnekler
Bu konuda çeşitli içinde depolanan xml örnekleri karşı XQuery örnekler sağlar xml sütunları yazın AdventureWorks2008R2 veritabanı.Bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.
A.Data() XQuery kullanarak işlev yazılı değerinin bir düğüm ayıklamak için
Aşağıdaki sorgu gösterir nasıl data() işlev 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
Bu sonucu verir:
<Root ProductID="19" Feature="parts and labor"/>
Belirtildiği gibi data() işlev öznitelikleri oluşturulurken isteğe bağlıdır.Belirtirseniz, data() işlev, onu dolaylı olarak varsayılmaktadır.Aşağıdaki sorgu aynı üreten sonuçlar önceki sorgu olarak:
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şlev gereklidir.
Aşağıdaki sorgu, $pd / p1:Specifications / malzeme verir <Material> öğesi.Ayrıca, data($pd/p1:Specifications/ Material) döndürür, çünkü xdt:untypedAtomic yazılan veriler karakter <Material> türlenmemiş olduğunu.Ne zaman giriş untyped, sonucu data() olarak yazılı 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;
Bu sonucu verir:
<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;