sql
DECLARE @xml XML = '
<Customers>
<Customer CustomerID="C001">
<Name>王五</Name>
<Contacts>
<Phone>13800138000</Phone>
<Email>wangwu@example.com</Email>
</Contacts>
<Orders>
<Order>
<OrderID>2001</OrderID>
<Amount>3000.00</Amount>
</Order>
<Order>
<OrderID>2002</OrderID>
<Amount>1500.00</Amount>
</Order>
</Orders>
</Customer>
</Customers>'
-- 解析嵌套结构
SELECT
CustomerNode.value('@CustomerID', 'NVARCHAR(20)') AS CustomerID,
CustomerNode.value('(Name)[1]', 'NVARCHAR(50)') AS CustomerName,
CustomerNode.value('(Contacts/Phone)[1]', 'NVARCHAR(20)') AS Phone,
CustomerNode.value('(Contacts/Email)[1]', 'NVARCHAR(100)') AS Email,
OrderNode.value('(OrderID)[1]', 'INT') AS OrderID,
OrderNode.value('(Amount)[1]', 'DECIMAL(10,2)') AS Amount
FROM @xml.nodes('/Customers/Customer') AS T(CustomerNode)
CROSS APPLY CustomerNode.nodes('Orders/Order') AS O(OrderNode)
这段SQL代码演示了如何解析XML格式的嵌套客户数据。通过XQuery方法,代码从XML变量中提取客户信息(ID、姓名、电话、邮箱)以及每个客户的多个订单明细(订单ID、金额)。使用nodes()方法分别定位客户节点和订单节点,再通过value()方法提取具体字段值,最后使用CROSS APPLY将客户信息与订单明细关联输出。这种技术适用于处理包含多层嵌套结构的XML数据。