2015-04-07 3 views
0

С учетом следующих примеров структуры таблиц:Отправка нескольких строк в 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> 

Это значительно упрощенный пример из набор данных и структура, которые я использую, но большинство подходов, которые я пробовал, похоже, не создают правильные повторяющиеся узлы. Когда я присоединяюсь к таблицам перед выходом, они имеют тенденцию создавать несколько экземпляров записи клиента.

Спасибо за ваше время.

ответ

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 
+0

код не тестировался, но отражает модель я использовал для фактических данных. –