【问题标题】:Get data from SQL as XML从 SQL 获取数据作为 XML
【发布时间】:2020-08-04 10:25:01
【问题描述】:

非常感谢您的帮助。我正在使用 SQL FOR XML PATH,但节点有一些问题。

我有一个简单的表格(下面是生成的脚本)

voucher_number  payment_number  payment_date
---------------------------------------------------
D15             C15             2020-07-27
D16             C16             2020-07-25

我希望 XML 看起来像这样,看“对象”的级别:

<?xml version="1.0" encoding="UTF-8"?>
<objects>
   <object>
      <record>
         <voucher_number>D15</voucher_number>
         <payment_number>C15</payment_number>
         <payment_date>2020-07-27</payment_date>
      </record>
      <record>
         <voucher_number>D16</voucher_number>
         <payment_number>C16</payment_number>
         <payment_date>2020-07-25</payment_date>
      </record>
   </object>
</objects>

但是当我运行这个脚本时

SELECT 
      [voucher_number] as   [record/voucher_number]
      ,[payment_number] as  [record/payment_number]
      ,[payment_date] as    [record/payment_date]
  FROM #t1
FOR XML PATH ('object'), ROOT('Objects')

看起来是这样的……看看“对象”的层次。

   <?xml version="1.0" encoding="UTF-8"?>
    <Objects>
      <object>
          <record>
             <voucher_number>D15</voucher_number>
             <payment_number>C15</payment_number>
             <payment_date>2020-07-27</payment_date>
          </record>
       </object>
      <object>
          <record>
             <voucher_number>D16</voucher_number>
             <payment_number>C16</payment_number>
             <payment_date>2020-07-25</payment_date>
          </record>
       </object>
    </Objects>

我应该如何更改脚本以跨越两个“记录”子节点?

非常感谢提前:)

--- Script to generate the test table ---
Create table #t1 
    (
    [voucher_number] [nvarchar](50) NULL,
    [payment_number] [nvarchar](50) NULL,
    [payment_date] [date] NULL
    )

INSERT #t1 ([voucher_number], [payment_number], [payment_date]) VALUES (N'D15', N'C15',  CAST(N'2020-07-27' AS Date))
GO
INSERT #t1 ([voucher_number], [payment_number], [payment_date]) VALUES (N'D16', N'C16', CAST(N'2020-07-25' AS Date))

【问题讨论】:

  • XML 支持高度特定于供应商 - 所以请添加一个标签来指定您是否使用mysqlpostgresqlsql-serveroracledb2 - 或完全不同的东西。

标签: sql sql-server xml


【解决方案1】:

一种方法,使用一些嵌套的FOR XML 查询:

SELECT (SELECT V.voucher,
               V.payment,
               V.date
        FROM (VALUES('D15','C15',CONVERT(date,'20200727')),
                    ('D16','C16',CONVERT(date,'20200725')))V(voucher, payment, date)
        FOR XML PATH('record'), ROOT('object'),TYPE)
FOR XML PATH('objects');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多