【问题标题】:SQL table key value pairs to a XMLSQL 表键值对到 XML
【发布时间】:2011-05-13 04:36:38
【问题描述】:

我有一个数据表如下

ID键值 -------------------------- 1 F1 2 2 F2 5 3 F3 1

在 SQL Server 2005 中使用 TSQL,如何将其转换为 XML 格式

<Values>
  <F1>2</F1>
  <F2>5</F2>
  <F3>1</F3>
</Values>

请帮忙。

【问题讨论】:

    标签: sql sql-server xml sql-server-2005 tsql


    【解决方案1】:

    据我所知,即使是神秘的 for xml explicit 也不允许您根据列命名 XML 标记。如果有几个不同的键,您可以通过枚举它们来解决这个问题:

    select  case when [key] = 'F1' then [value] end as [F1]
    ,       case when [key] = 'F2' then [value] end as [F2]
    ,       case when [key] = 'F3' then [value] end as [F3]
    from    @t
    for xml path(''), root('Values')
    

    如果有很多不同的键,您可以手动构建 XML 字符串:

    declare @output varchar(max)
    set @output = '<Values>'
    
    select  @output = @output + 
                '<' + [key] + '>' + 
                CAST([value] as varchar(32)) + 
                '</' + [key] + '>'
    from    @t
    
    set @output = @output + '</Values>'
    
    select @output
    

    测试数据:

    declare @t table (id int, [key] varchar(3), value int)
    insert @t values (1, 'F1', 2)
    insert @t values (2, 'F2', 5)
    insert @t values (3, 'F3', 1)
    

    两种选择都打印:

    <Values><F1>2</F1><F2>5</F2><F3>1</F3></Values>
    

    【讨论】:

    • 这很好用。我正在尝试使用“for xml explicit”,但无法通过。谢谢这回答了我的问题。
    【解决方案2】:

    为什么不直接查询表,将行存储在数组中,然后使用您的(可能是服务器)脚本语言将它们输出(到文件或屏幕)?如果有办法让 SqlServer 像这样输出,我不知道,但它应该在几乎任何语言中都很简单。

    伪代码

    LET arr = array of table rows
    print "<Values>"
    foreach in arr as row
      print "<" + row['Key'] + ">" + row['Value'] + "</" + row['Key'] + ">"
    end foreach
    print "</Values>"
    

    【讨论】:

    • 我想在存储过程中执行此操作,而不需要提取数据。所以这对我来说不是一个好的选择。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多