Как запретить SQL Server объединять результаты XML с тем же именем - PullRequest
3 голосов
/ 27 января 2010

Я пытаюсь сгенерировать документ XML с использованием функций XML в SQL 2008, но столкнулся с проблемой, когда документ требует, чтобы два узла имели одинаковое имя, но SQL Server автоматически объединяет любые узлы с одинаковым именем.

Например:

<Location>
  <Address>Some Street</Address>
  <Address>Some other info</Address>
</Location>

Проблема в том, что когда я пытаюсь сделать это, выполнив SQL ниже, я получаю:

<Location>
  <Address>Some StreetSome other info</Address>
</Location>

Вот как я выбираю данные:

 SELECT CustomerStreet1 AS 'location/address',
        CustomerStreet2 AS 'location/address'
   FROM Customers
FOR XML PATH('Customer')

Хотя другой узел, выбранный между двумя полями адреса, выполняет то, что я ищу, мне нужно иметь возможность объединить два узла адреса.

1 Ответ

3 голосов
/ 27 января 2010
WITH    customers (id, CustomerStreet1, CustomerStreet2) AS
        (
        SELECT  1, 'Some Street', 'Some other info'
        UNION ALL
        SELECT  2, 'Second Street', NULL
        )
SELECT  id,
        (
        SELECT  *
        FROM    (
                SELECT  CustomerStreet1 AS Address
                UNION ALL
                SELECT  CustomerStreet2
                ) q
        FOR XML PATH(''), TYPE
        )
FROM    customers 
FOR XML PATH('Customers')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...