SQL Table 结果是 xml 输出

SQL Table result in a xml output

我有一个table

Key     code 
1       100
1       200
1       300
1       400
2       100
2       200
2       300

我正在用键在一行中查找我的结果,在另一行中查找结果 XML_data

Key      XML_Data(XML column)
1        <sub><key>1...
2        <sub><key>2...

XML_Data 示例:

<sub>
  <key> 1 </Key>
    <list>
      <code> 100 </code>
      <code> 200 </code>
      <code> 300 </code>
      <code> 400 </code>
   </list>
</sub>

谢谢

您没有详细说明 XML 在哪里等等,但一般来说,以下查询应该对您的情况有所帮助。

INSERT INTO dbo.YourTable
  (key, xml_data) 
VALUES 
  (KEY, CONVERT(XML, N'YOUR_XML', 2));

您可以更进一步,通过将 XML 声明为变量,从 XML 中提取您的 KEY,并根据整个变量添加到第 2 列 XML。

DECLARE @input XML = '<sub>
  <key> 1 </key>
    <list>
      <code> 100 </code>
      <code> 200 </code>
      <code> 300 </code>
      <code> 400 </code>
   </list>
</sub>'

INSERT INTO dbo.YourTable(key, xml_data)
   SELECT
      key = COALESCE(XCol.value('key[1]', 'int'),0),
      xml_data = CONVERT(XML, N''''+@input+'''', 2)
   FROM  @input.nodes('/sub') AS XTbl(XCol)

@ATC,感谢您的评论。如果真的需要将 table 转换为 XML 格式,请尝试以下 - FOR XML PATH 是您要查找的内容

SELECT 
   key,
   code as "list/code"
FROM dbo.YourTable
FOR XML PATH('sub')

很遗憾,我现在无法对其进行测试。 在这里你可以看到类似的问题:How to convert records in a table to xml format using T-SQL?

我认为这个SQL Server: Two-level GROUP BY with XML output更接近。

张贴在这里是因为我没有评论的声誉。

你的问题很模糊,但我的魔法水晶球告诉我,你正在寻找这个:

DECLARE @tbl TABLE([Key] INT, code INT);
INSERT INTO @tbl VALUES 
 (1,100)
,(1,200)
,(1,300)
,(1,400)
,(2,100)
,(2,200)
,(2,300);

--查询将首先找到一个不同的键列表,然后使用嵌套的 FOR XML-selects 将您的数据收集到所需的结构中:

WITH DistinctKeys AS
(SELECT [Key] FROM @tbl GROUP BY [Key])
SELECT dk.[Key]
      ,(
        SELECT dk.[Key]
              ,(
                SELECT t.code
                FROM @tbl AS t
                WHERE t.[Key]=dk.[Key]
                FOR XML PATH(''),ROOT('list'),TYPE
               )
        FOR XML PATH('sub'),TYPE    
       ) AS XML_Data
FROm DistinctKeys AS dk

结果

Key XML_Data
1   <sub><Key>1</Key><list><code>100</code><code>200</code><code>300</code><code>400</code></list></sub>
2   <sub><Key>2</Key><list><code>100</code><code>200</code><code>300</code></list></sub>