【问题标题】:Write specifically structured XML from t-sql query从 t-sql 查询编写专门结构化的 XML
【发布时间】:2014-05-14 11:23:19
【问题描述】:

我希望能够以这种特定格式写出一个 XML 文件。我一直在阅读bcp 并尝试使用FOR XML,但似乎无法在这里实现我所需要的。我将不胜感激在正确方向上的任何帮助。虽然我知道我可以重构使用这个 XML 输出的代码;我想在这里冒险并坚持手头的任务而不改变任何东西。

用于重新创建临时变量表​​数据集的 SQL 代码

declare @dataset table(Color nvarchar(10), Number int, Code nvarchar(10))

insert into @dataset 
  select 'Green', 12345, 'US1'
  union
  select 'Red', 56789, 'US2'

select * from @dataset

我想通过这个查询生成以下 XML 文档。

<?xml version="1.0" encoding="utf-8" ?>
<test>
  <collection>
    <Case>
      <input>
        <attribute name="Color">Green</attribute>
        <attribute name="Number">12345</attribute>
        <attribute name="Code">US1</attribute>
      </input>
    </Case>
    <Case>
      <input>
        <attribute name="Color">Red</attribute>
        <attribute name="Number">56789</attribute>
        <attribute name="Code">US2</attribute>
      </input>
    </Case>
  </collection>
</test>

我会听从各位专家的意见,告诉我这是否太荒谬而无法实现,但我认为这是“可能的”,因为到目前为止我已经有点接近了。

我一直在修改这个并能够写出 XML 文件。

exec master..xp_cmdshell 'bcp "Query Here" queryout "c:\filename.xml" -c -T'

感谢 SO 成员!

【问题讨论】:

    标签: sql-server xml tsql bcp


    【解决方案1】:
    select (
           select (
                  select 'Color' as [attribute/@name],
                         Color as [attribute],
                         null,
                         'Number' as [attribute/@name],
                         Number as [attribute],
                         null,
                         'Code' as [attribute/@name],
                         Code as [attribute]
                  for xml path('input'), type 
                  ) 
           from @dataset
           for xml path('Case'), root('collection'), type
           )
    for xml path('test'), type
    

    【讨论】:

    • 不知道混合同名属性和元素的空技巧,太棒了!
    • 简单有效!我正在考虑使用 FOR XML EXPLICIT,但这看起来更干净。
    • @SAS 啊。幸运的是,到目前为止,我只见过一种情况需要使用 for xml explicit.
    • @MikaelEriksson 你先生是男人! :) 感谢您提供快速而优雅的解决方案。我知道 SO 会有答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多