SQL表导致xml输出

时间:2017-03-23 18:28:16

标签: sql sql-server sql-server-2008 sql-server-2014 sqlxml

我有一张桌子

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>

由于

3 个答案:

答案 0 :(得分:1)

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

在此发表,因为我没有评论的声誉。

答案 1 :(得分:0)

您没有详细说明XML的位置等等,但一般情况下,查询后应该对您的情况有所帮助。

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

通过将XML声明为变量,从XML中提取KEY,再到第二列,根据整个变量添加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 ,感谢您的评论。如果确实需要的是将表格转换为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?

答案 2 :(得分:0)

你的问题非常模糊,但我神奇的水晶球告诉我,你正在寻找这个:

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 - 选择将数据收集到所需的结构中:

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>