将多行发送到XML并创建多个节点

时间:2015-04-07 18:08:13

标签: 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:
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>

这是我正在使用的数据集和结构的一个极其简化的示例,但我尝试过的大多数方法似乎都没有正确地创建重复节点。当我在输出之前加入表时,他们倾向于创建客户记录的多个实例。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

花了一些时间之后,似乎可以通过嵌套一系列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