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

代码未经测试,但反映了我用于实际数据的模型。