来自T-SQL的整洁XML

时间:2010-07-06 07:36:25

标签: xml tsql sqlxml

让我们说我们有一个表“名字”:

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 个答案:

答案 0 :(得分:2)

试试这个:

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

FOR XML PATH定义围绕每个行的标记,而FOR XML ... ROOT定义围绕行集合的根元素。

答案 1 :(得分:0)

如果你想用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;