使用所需格式的SQL构造XML

时间:2018-03-23 21:39:59

标签: sql sql-server tsql sqlxml

我只在桌子上做一个选择,只选择两列。

我想构建以下XML

        <root>
            <choice value='1'>choice 1</choice>
            <choice value='2'>choice 2</choice>
            <choice value='3'>choice 3</choice>
        </root>

我现在可以得到:

<root>
  <choice value="1">choice 1</choice>
</root>
<root>
   <choice value="2">choice 2</choice>
</root>
<root>
   <choice value="3">choice 3</choice>
</root>

使用此SQL:

SELECT 
ID AS 'choice/@value',
DisplayName AS 'choice'
FROM tablename
WHERE [Status] = 'open'
FOR XML PATH ('root')

我需要更改才能获得该格式?即一个根元素中的选择元素?

谢谢,

2 个答案:

答案 0 :(得分:1)

好吧我觉得我明白了......

SELECT 
ID AS 'choice/@value',
DisplayName AS 'choice'
FROM tablename
WHERE [Status] = 'open'
FOR XML PATH ('') , ROOT('root')

答案 1 :(得分:1)

你找到了答案,很棒(+1来自我方),还有一个选择: - )

DECLARE @tbl TABLE(ID INT IDENTITY,DisplayName VARCHAR(100));
INSERT INTO @tbl VALUES('Choice 1'),('Choice 2');

SELECT ID AS [@value]
      ,DisplayName AS [*]
FROM @tbl 
FOR XML PATH('choice'),ROOT('root')

PATH('x')为每个表行提供一个节点,而ROOT('y')将整个输出包装到根元素中。

上面的代码将完全相同,但更接近它的意图......