Tôi đang sử dụng SQL Server 2008.
Nhiệm vụ: lấy một tệp XML và phân tích nó thành một bảng SQL (n).
Vấn đề: Số cột và tên của chúng sẽ khác nhau dựa trên XML.Làm cách nào để tạo bảng SQL từ tệp XML có số nút động?
Dưới đây là một số mã:
DECLARE @xmlData XML;
SET @xmlData = '<root>
<item id="1">
<item_number>IT23</item_number>
<title>Item number twenty-three</title>
<setting>5 to 20</setting>
<parameter>10 to 16</parameter>
</item>
<item id="2">
<item_number>RJ12</item_number>
<title>Another item with a 12</title>
<setting>7 to 35</setting>
<parameter>1 to 34</parameter>
</item>
<item id="3">
<item_number>LN90</item_number>
<title>LN with 90</title>
<setting>3 to 35</setting>
<parameter>9 to 50</parameter>
</item>
</root>'
Ví dụ bằng cách sử dụng XML ở trên, tôi sẽ cần một bảng SQL trả về có mà sẽ trông như thế này:
Đây là cách tôi đã nêu trên bảng:
DECLARE @idoc INT;
EXEC sp_xml_preparedocument @idoc OUTPUT, @xmlData
SELECT *
FROM OPENXML (@idoc, '/root/item', 2)
WITH (item_number VARCHAR(100),
title VARCHAR(100),
setting VARCHAR(100),
parameter VARCHAR(100))
Bây giờ giả sử XML đã thay đổi trong đó mỗi nút mục có một nút con mới với tên 'new_node'. Cũng giống như vậy:
<root>
<item id="1">
<item_number>IT23</item_number>
<title>Item number twenty-three</title>
<setting>5 to 20</setting>
<parameter>10 to 16</parameter>
<new_node>data</new_node>
</item>
<item id="2">
<item_number>RJ12</item_number>
<title>Another item with a 12</title>
<setting>7 to 35</setting>
<parameter>1 to 34</parameter>
<new_node>goes</new_node>
</item>
<item id="3">
<item_number>LN90</item_number>
<title>LN with 90</title>
<setting>3 to 35</setting>
<parameter>9 to 50</parameter>
<new_node>here</new_node>
</item>
</root>
tôi phải thay đổi mã của tôi để bao gồm các nút mới:
SELECT *
FROM OPENXML (@idoc, '/root/item', 2)
WITH (item_number VARCHAR(100),
title VARCHAR(100),
setting VARCHAR(100),
parameter VARCHAR(100),
new_node VARCHAR(100))
Để có được bảng này:
Vì vậy, vấn đề là các nút con của 'item' sẽ thay đổi.
Làm cách nào để tạo các bảng giống nhau mà không chỉ định các cột? Có cách tiếp cận nào khác ngoài việc sử dụng OPENXML không?
Chỉ cần tò mò, tại sao bạn cần tạo bảng SQL từ XML, trái ngược với việc lưu trữ XML đơn giản? Bạn sẽ làm gì với một bảng SQL với một tập hợp các cột không xác định mà bạn sẽ không thể làm với XML được lưu trữ trong một kiểu dữ liệu XML? –
Điều này giống như yêu cầu, làm thế nào để xây dựng một ngôi nhà nếu tôi không biết có bao nhiêu phòng ngủ tôi cần? –
Michael Fredrickson: Tôi _will_ được lưu trữ XML, đây chỉ là một ví dụ đơn giản, nhưng cuối cùng bảng sẽ được trả về một trang mã phía sau sẽ tạo ra một bảng HTML –