Dengan asumsi Anda memiliki XML Anda dalam variabel SQL Server yang disebut @XML
, Anda dapat menggunakan XQuery asli dukungan di SQL Server 2005 dan yang lebih baru untuk melakukan ini dengan lebih elegan dan efisien:
DECLARE @XML XML = '...(your XML here).....'
SELECT
RootID = @xml.value('(/Root/@ID)[1]', 'int'),
ConditionSetOperator = XC.value('@Operator', 'varchar(50)'),
ConditionID = XC2.value('@ID', 'int'),
ConditionOperator = XC2.value('@Operator', 'varchar(50)')
FROM
@Xml.nodes('//ConditionSet') AS XT(XC)
CROSS APPLY
xc.nodes('Condition') AS XT2(XC2)
Ini memberi saya output dari
Dengan operator XQuery seperti .nodes()
atau .value()
, Anda dapat dengan mudah "menghancurkan" dokumen XML menjadi data relasional dan menyimpannya sesuai kebutuhan.
Panggilan pertama ke @xml.nodes('//ConditionSet')
akan mendapatkan tabel "pseudo" untuk setiap node yang cocok - jadi setiap <ConditionSet>
node akan dikembalikan dalam tabel "pseudo" XT
sebagai kolom XC
, dan kemudian saya dapat dengan mudah mengambil atribut (atau elemen XML) dari fragmen XML tersebut menggunakan metode XQuery seperti .value()
.
Atau saya bahkan dapat mengambil daftar sub-simpul <Condition>
untuk masing-masing <ConditionSet>
node - menggunakan CROSS APPLY
dengan panggilan kedua ke .nodes()