Sql 将多行发送到XML并创建多个节点
给定以下示例表结构:Sql 将多行发送到XML并创建多个节点,sql,xml,Sql,Xml,给定以下示例表结构: Table Customer: CustomerID varchar(50), CustomerName varchar(50) Sample Data: Customer ID CustomerName ABC123 Joe Sample Table Phone: CustomerID varchar(50), PhoneNumber varchar(50), PhoneType varchar(50) Sample Data: Customer
Table Customer:
CustomerID varchar(50),
CustomerName varchar(50)
Sample Data:
Customer ID CustomerName
ABC123 Joe Sample
Table Phone:
CustomerID varchar(50),
PhoneNumber varchar(50),
PhoneType varchar(50)
Sample Data:
CustomerID PhoneNumber PhoneType
ABC123 602-100-2000 Home
ACB123 602-200-1234 Cell
如何使用TSQL创建以下XML
<Customer>
<CustomerID>ABC123</CustomerID>
<CustomerName>Joe Sample</CustomerName>
<Phones>
<Phone>
<PhoneNumber>602-100-2000</PhoneNumber>
<PhoneType>Home</PhoneType>
</Phone>
<Phone>
<PhoneNumber>602-200-1234</PhoneNumber>
<PhoneType>Cell</PhoneType>
</Phone>
</Phones>
</Customer>
ABC123
乔样品
602-100-2000
家
602-200-1234
细胞
这是我正在使用的数据集和结构中的一个大大简化的示例,但我尝试的大多数方法似乎都没有正确地创建重复节点。当我在输出之前加入表时,它们倾向于创建客户记录的多个实例
谢谢您的时间。在花了更多时间之后,似乎可以通过嵌套一系列for XML PATH语句来指定结构:
SELECT CustomerID AS 'CustomerID' ,
CustomerName AS 'CustomerName' ,
( SELECT ( SELECT PhoneNumber AS 'PhoneNumber' ,
PhoneType AS 'PhoneType'
FROM Phone
WHERE Phone.CustomerID = Customer.CustomerID
FOR
XML PATH('Phone') ,
TYPE
)
FOR
XML PATH('Phones') ,
TYPE
)
FROM Customer
FOR XML PATH('Customer') ,
TYPETYPE
代码未经测试,但反映了我用于实际数据的模型。