按要求的格式用 SQL 构造 XML

Construct XML with SQL in required format

我正在 table 上做一个 select 只 select 两列。

我想构造如下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')

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

谢谢,

好的,我想我明白了...

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

你找到了答案,太棒了(我这边的+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') 为每个 table 行提供一个节点,而 ROOT('y') 将整个输出包装到一个根元素中。

上面的代码将返回完全相同的结果,但更接近于它的本意...