Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Mengembalikan nilai yang ditik untuk setiap item yang ditentukan oleh $arg.
Sintaks
fn:data ($arg as item()*) as xdt:untypedAtomic*
Argumen
$arg
Urutan item yang nilai tipenya dikembalikan.
Keterangan
Pertimbangan berikut berlaku untuk nilai yang ditik:
Nilai yang diketik dari nilai atom adalah nilai atomik.
Nilai yang di ketik dari simpul teks adalah nilai string dari simpul teks.
Nilai komentar yang ditik adalah nilai string komentar.
Nilai yang di ketik dari instruksi pemrosesan adalah konten instruksi pemrosesan, tanpa nama target instruksi pemrosesan.
Nilai yang ditik dari node dokumen adalah nilai string-nya.
Pertimbangan berikut berlaku untuk atribut dan node elemen:
Jika node atribut diketik dengan jenis skema XML, nilai yang diketik adalah nilai yang diketik.
Jika node atribut tidak dititip, nilai yang di ketik sama dengan nilai stringnya yang dikembalikan sebagai instans .
xdt:untypedAtomicJika simpul elemen belum di ketik, nilai yang di ketik sama dengan nilai stringnya yang dikembalikan sebagai instans .
xdt:untypedAtomic
Pertimbangan berikut berlaku untuk node elemen yang ditik:
Jika elemen memiliki jenis konten sederhana,
data()mengembalikan nilai elemen yang ditik.Jika node berjenis kompleks, termasuk xs:anyType,
data()mengembalikan kesalahan statis.
Meskipun menggunakan data() fungsi ini sering bersifat opsional, seperti yang ditunjukkan dalam contoh berikut, menentukan data() fungsi secara eksplisit meningkatkan keterbacaan kueri. Untuk informasi selengkapnya, lihat Dasar-Dasar XQuery.
Anda tidak dapat menentukan data() pada XML yang dibangun, seperti yang diperlihatkan dalam contoh berikut:
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Contoh
Artikel ini menyediakan contoh XQuery terhadap instans XML yang disimpan di berbagai kolom jenis xml di database AdventureWorks.
J. Gunakan fungsi XQuery data() untuk mengekstrak nilai node yang diekstrak
Kueri berikut mengilustrasikan bagaimana data() fungsi digunakan untuk mengambil nilai atribut, elemen, dan simpul teks:
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;
Berikut hasilnya:
<Root ProductID="19" Feature="parts and labor"/>
Seperti disebutkan, data() fungsi ini bersifat opsional saat Anda membuat atribut. Jika Anda tidak menentukan data() fungsi, fungsi tersebut diasumsikan secara implisit. Kueri berikut menghasilkan hasil yang sama dengan kueri sebelumnya:
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;
Contoh berikut mengilustrasikan instans di mana data() fungsi diperlukan.
Dalam kueri berikut, $pd/p1:Specifications/Material mengembalikan <Material> elemen . Selain itu, data($pd/p1:Specifications/ Material) mengembalikan data karakter yang dititik sebagai xdt:untypedAtomic, karena <Material> tidak dititik. Ketika input tidak dijenis, hasilnya data() dititikkan sebagai 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;
Berikut hasilnya:
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
Dalam kueri berikut, data($pd/p1:Features/wm:Warranty) mengembalikan kesalahan statis, karena <Warranty> merupakan elemen tipe kompleks.
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;