Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
$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;