Чистый XML из T-SQL - PullRequest
       36

Чистый XML из T-SQL

0 голосов
/ 06 июля 2010

Допустим, у нас есть таблица "Имена":

ID    Name    Surname
1     Matt    Smith
2     John    Doe

Как бы вы написали SQLXML для генерации этого:

<people>
  <person>
    <name>Matt</name>
    <surname>Smith</surname>
  <person>
  <person>
    <name>John</name>
    <surname>Doe</surname>
  <person>
</people>

Лучшее, что у меня есть, это:

select r.value('Name[1]', 'nvarchar(10)'), r.value('Surname[1]', 'nvarchar(10)')
from Names
for xml path('people')

Что дает мне:

<people>
  <name>Matt</name>
  <surname>Smith</surname>
</people>
<people>
  <name>John</name>
  <surname>Doe</surname>
</people>

Короче, как мне обернуть всю партию?

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Попробуйте:

SELECT 
   Name,
   Surname
FROM 
   dbo.Names
FOR XML PATH('person'), ROOT('people')

FOR XML PATH определяет тег для окружения каждой отдельной строки, в то время как FOR XML ... ROOT определяет корневой элемент, окружающий коллекцию строк.

0 голосов
/ 06 июля 2010

Если вы хотите сделать это полностью XML-способом,

Вы можете иметь переменную,

Declare @XMLOP xml
SET @XMLOP  = '<people></people>'

set @XMLOP.modify('       
insert (select r.value('Name[1]', 'nvarchar(10)'), r.value('Surname[1]', 'nvarchar(10)') 
        from Names 
        for xml path('Person'))
after (/people)[1]       
');

SELECT @XMLOP;
...