Giả sử bạn có XML của mình trong một biến SQL Server được gọi là @XML
, bạn có thể sử dụng XQuery gốc hỗ trợ trong SQL Server 2005 và mới hơn để thực hiện điều này một cách thanh lịch và hiệu quả hơn nhiều:
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)
Điều này cho tôi kết quả là
Với các toán tử XQuery như .nodes()
hoặc .value()
, bạn có thể dễ dàng "cắt nhỏ" tài liệu XML thành dữ liệu quan hệ và lưu trữ khi cần.
Lệnh gọi đầu tiên tới @xml.nodes('//ConditionSet')
sẽ nhận được một bảng "giả" cho mỗi nút phù hợp - vì vậy mỗi <ConditionSet>
sẽ được trả về trong bảng "pseudo" XT
dưới dạng cột XC
và sau đó tôi có thể dễ dàng lấy các thuộc tính (hoặc các phần tử XML) từ phân đoạn XML đó bằng cách sử dụng các phương thức XQuery như .value()
.
Hoặc tôi thậm chí có thể lấy danh sách các nút phụ <Condition>
cho mỗi <ConditionSet>
đó các nút - sử dụng CROSS APPLY
với cuộc gọi thứ hai tới .nodes()