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
Azure SQL Database
Azure SQL Managed Instance
Atribut metaproperty dalam dokumen XML adalah atribut yang menjelaskan properti item XML, seperti elemen, atribut, atau simpul DOM lainnya. Atribut ini tidak ada secara fisik dalam teks dokumen XML. Namun, OPENXML menyediakan metaproperti ini untuk semua item XML. Metaproperti ini memungkinkan Anda mengekstrak informasi, seperti posisi lokal dan informasi namespace, simpul XML. Informasi ini memberi Anda detail lebih lanjut daripada yang jelas dalam representasi tekstual.
Anda dapat memetakan metaproperti ini ke kolom set baris dalam pernyataan OPENXML dengan menggunakan parameter ColPattern . Kolom-kolom tersebut akan berisi nilai-nilai dari metaproperti yang dipetakan pada mereka. Untuk informasi selengkapnya tentang sintaks OPENXML, lihat OPENXML (Transact-SQL).
Untuk mengakses atribut metaproperty, disediakan namespace khusus untuk SQL Server. Namespace layanan ini, urn:schemas-microsoft-com:xml-metaprop
memungkinkan pengguna untuk mengakses atribut metaproperty. Jika hasil kueri OPENXML dikembalikan dalam format tabel tepi, tabel tepi berisi satu kolom untuk setiap atribut metaproperti, kecuali xmltext
metaproperti.
Beberapa atribut metaproperty digunakan untuk tujuan pemrosesan. Misalnya, xmltext
atribut metaproperty digunakan untuk penanganan luapan. Penanganan luapan mengacu pada data yang tidak dikonsumsi dan tidak diolah dalam dokumen. Salah satu kolom dalam kumpulan baris yang dihasilkan oleh OPENXML dapat diidentifikasi sebagai kolom luapan. Anda melakukan ini dengan memetakannya ke xmltext
metaproperti dengan menggunakan parameter ColPattern . Kolom tersebut kemudian menerima data berlebih. Parameter bendera menentukan apakah kolom berisi semuanya atau hanya data yang tidak dikonsumsi.
Tabel berikut mencantumkan atribut metaproperty yang dimiliki setiap elemen XML yang diurai. Atribut metaproperty ini dapat diakses dengan menggunakan namespace urn:schemas-microsoft-com:xml-metaprop
. Nilai apa pun yang ditetapkan pengguna langsung dalam dokumen XML dengan menggunakan metaproperti ini diabaikan.
Catatan
Anda tidak dapat mereferensikan metaproperti ini di navigasi XPath apa pun.
Atribut Metaproperty | Deskripsi |
---|---|
@mp:id |
Menyediakan pengidentifikasi yang berlaku untuk seluruh dokumen yang dibuat oleh sistem dari node DOM. Selama dokumen tidak direparasi, ID ini mengacu pada simpul XML yang sama. ID 0 XML menunjukkan bahwa elemen adalah elemen root. ID XML induknya ADALAH NULL. |
@mp:localname |
Menyimpan bagian lokal dari nama simpul. Ini digunakan dengan awalan dan URI namespace untuk memberi nama elemen atau node atribut. |
@mp:namespaceuri |
Menyediakan URI namespace dari elemen saat ini. Jika nilai atribut ini NULL, tidak ada namespace ditemukan |
@mp:prefix |
Menyimpan awalan namespace dari nama elemen saat ini. Jika tidak ada awalan yang ada (NULL) dan URI diberikan, itu menunjukkan bahwa namespace yang ditentukan adalah namespace default. Jika tidak ada URI yang diberikan, tidak ada namespace yang dilampirkan. |
@mp:prev |
Menyimpan saudara kandung sebelumnya relatif terhadap simpul. Ini menyediakan informasi tentang pengurutan elemen dalam dokumen.@mp:prev berisi ID XML dari saudara kandung sebelumnya yang memiliki elemen induk yang sama. Jika elemen berada di bagian depan daftar saudara, @mp:prev adalah NULL. |
@mp:xmltext |
Digunakan untuk tujuan pemrosesan. Ini adalah serialisasi tekstual elemen dan atributnya, dan juga subelemen-subelemen, sebagaimana digunakan dalam penanganan overflow OPENXML. |
Tabel ini memperlihatkan properti induk tambahan yang disediakan dan yang memungkinkan Anda untuk mengambil informasi tentang hierarki.
Atribut metaproperti induk | Deskripsi |
---|---|
@mp:parentid |
Sesuai dengan ../\@mp:id |
@mp:parentlocalname |
Sesuai dengan ../\@mp:localname |
@mp:parentnamespacerui |
Sesuai dengan ../\@mp:namespaceuri |
@mp:parentprefix |
Sesuai dengan ../\@mp:prefix |
Contoh
Contoh berikut menggambarkan bagaimana OPENXML digunakan untuk membuat tampilan set baris yang berbeda.
A. Memetakan kolom set baris OPENXML ke metaproperti
Contoh ini menggunakan OPENXML untuk membuat tampilan kumpulan baris dari contoh dokumen XML. Secara khusus, ini menunjukkan bagaimana berbagai atribut metaproperti dapat dipetakan ke kolom rowset dalam pernyataan OPENXML dengan menggunakan parameter ColPattern .
Pernyataan OPENXML mengilustrasikan hal berikut:
Kolom
id
dipetakan ke@mp:id
atribut metaproperty dan menunjukkan bahwa kolom berisi ID XML unik yang dihasilkan sistem dari elemen .Kolom
parent
dipetakan ke@mp:parentid
dan menunjukkan bahwa kolom berisi ID XML dari induk elemen.Kolom
parentLocalName
dipetakan ke@mp:parentlocalname
dan menunjukkan bahwa kolom berisi nama lokal induk.
Pernyataan SELECT kemudian mengembalikan set baris yang disediakan oleh OPENXML:
DECLARE @idoc int;
DECLARE @doc nvarchar(1000);
-- Sample XML document
SET @doc = N'<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>';
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 9)
WITH (id int '@mp:id',
oid char(5),
date datetime,
amount real,
parentIDNo int '@mp:parentid',
parentLocalName varchar(40) '@mp:parentlocalname');
EXEC sp_xml_removedocument @idoc;
Ini adalah hasilnya:
id oid date amount parentIDNo parentLocalName
--- ------- ---------------------- ---------- ------------ ---------------
6 O1 1996-01-20 00:00:00.000 3.5 2 Customer
10 O2 1997-04-30 00:00:00.000 13.4 2 Customer
19 O3 1999-07-14 00:00:00.000 100.0 15 Customer
25 O4 1996-01-20 00:00:00.000 10000.0 15 Customer
B. Mengambil seluruh dokumen XML
Dalam contoh ini, OPENXML digunakan untuk membuat tampilan kumpulan baris satu kolom dari contoh dokumen XML. Kolom ini, Col1
, dipetakan ke xmltext
metaproperti dan menjadi kolom luapan. Akibatnya, kolom menerima data yang belum digunakan. Dalam hal ini, ini adalah seluruh dokumen.
Pernyataan SELECT kemudian mengembalikan set baris lengkap.
DECLARE @idoc int;
DECLARE @doc nvarchar(1000);
SET @doc = N'<?xml version="1.0"?>
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very
satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
white red">
<MyTag>Testing to see if all the subelements are returned</MyTag>
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>';
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/')
WITH (Col1 ntext '@mp:xmltext')
Untuk mengambil seluruh dokumen tanpa deklarasi XML, kueri dapat ditentukan seperti yang diperlihatkan dalam hal berikut:
SELECT *
FROM OPENXML (@idoc, '/root')
WITH (Col1 ntext '@mp:xmltext')
EXEC sp_xml_removedocument @idoc;
Kueri mengembalikan elemen akar yang memiliki nama root dan data yang terkandung dalam elemen akar tersebut.
C. Menentukan metaproperti xmltext untuk mengambil data yang tidak dikonsumsi dalam kolom
Contoh ini menggunakan OPENXML untuk membuat tampilan kumpulan baris dari contoh dokumen XML. Contoh menunjukkan cara mengambil data XML yang tidak dikonsumsi dengan memetakan xmltext
atribut metaproperty ke kolom set baris di OPENXML.
Kolom comment
diidentifikasi sebagai kolom luapan dengan memetakannya ke @mp:xmltext
metaproperti. Parameter bendera diatur ke 9
(XML_ATTRIBUTE dan XML_NOCOPY). Ini menunjukkan attribute-centric
pemetaan dan menunjukkan bahwa hanya data yang tidak dikonsumsi yang harus disalin ke kolom luapan.
Pernyataan SELECT kemudian mengembalikan set baris yang disediakan oleh OPENXML.
Dalam contoh ini, @mp:parentlocalname
metaproperti diatur untuk kolom, ParentLocalName
, dalam himpunan baris yang dihasilkan dari OPENXML. Akibatnya, kolom ini berisi nama lokal elemen induk.
Dua kolom tambahan ditentukan dalam set baris, parent
dan comment
. Kolom parent
dipetakan ke @mp:parentid
dan menunjukkan bahwa kolom berisi ID XML dari elemen induk elemen. Kolom komentar diidentifikasi sebagai kolom luapan dengan memetakannya ke @mp:xmltext
metaproperti.
DECLARE @idoc int;
DECLARE @doc nvarchar(1000);
-- sample XML document
SET @doc = N'<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
';
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 9)
WITH (oid char(5),
date datetime,
comment ntext '@mp:xmltext');
EXEC sp_xml_removedocument @idoc;
Ini adalah hasilnya. Karena kolom oid dan kolom tanggal telah dipakai, maka kedua kolom tersebut tidak muncul di kolom overflow.
oid date comment
----- --------------------------- ----------------------------------------
O1 1996-01-20 00:00:00.000 <Order amount="3.5"/>
O2 1997-04-30 00:00:00.000 <Order amount="13.4">Customer was very
satisfied</Order>
O3 1999-07-14 00:00:00.000 <Order amount="100" note="Wrap it blue
white red"><Urgency>
Important</Urgency></Order>
O4 1996-01-20 00:00:00.000 <Order amount="10000"/>