【问题标题】:Deserialization XML raw in T-SQLT-SQL 中的原始 XML 反序列化
【发布时间】:2021-08-12 19:51:16
【问题描述】:

我在 SQL Server 中有一个表。在此表中,我有一列 Response 的数据类型为 XML 值。如何像新表一样反序列化这个 XML 值?

我的表格列是:CreateDateRequestResponse

<request-message version="1.0">
<request class="GET_ALL">
    <parameter name="IsInSystem" type="System.Boolean">True</parameter>
    <parameter name="ConfirmDate" type="System.DateTime">2021-05-04 00:00:00.000</parameter>
    <parameter name="ConfirmTime" type="System.DateTime">2021-05-04 00:00:00.000</parameter>
</request>

我想将此响应写入以参数为列的表。

【问题讨论】:

  • 这不是代码编写服务。展示您尝试过的方法以及您需要的示例,我们可以帮助您解决问题。
  • 在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)

标签: sql-server xml tsql xquery shred


【解决方案1】:

不完全确定您要做什么 - 加上显示的 XML 无效(缺少 &lt;request-message&gt; 的结束标记)。

也许是这样的?我只是遍历&lt;parameter&gt; 节点并输出我能想到的所有相关信息,作为一个关系数据集:

DECLARE @SomeTable TABLE (ID INT NOT NULL, Request XML)

INSERT INTO @SomeTable (ID, Request)
VALUES (1, '<request-message version="1.0">
<request class="GET_ALL">
    <parameter name="IsInSystem" type="System.Boolean">True</parameter>
    <parameter name="ConfirmDate" type="System.DateTime">2021-05-04 00:00:00.000</parameter>
    <parameter name="ConfirmTime" type="System.DateTime">2021-05-04 00:00:00.000</parameter>
</request></request-message>'    )


SELECT
    ID,
    RequestClass = xc.value('(../@class)[1]', 'varchar(25)'),
    ParamName = XC.value('(./@name)[1]', 'varchar(50)'),
    ParamType = XC.value('(./@type)[1]', 'varchar(50)'),
    ParamValue = XC.value('(./text())[1]', 'varchar(250)')
FROM
    @SomeTable
CROSS APPLY
    Request.nodes('/request-message/request/parameter') AS XT(XC)
WHERE
    ID = 1

这会给你一个类似这样的结果:

ID RequestClass ParamName ParamType ParamValue
1 GET_ALL IsInSystem System.Boolean True
1 GET_ALL ConfirmDate System.DateTime 2021-05-04 00:00:00.000
1 GET_ALL ConfirmTime System.DateTime 2021-05-04 00:00:00.000

【讨论】:

  • 实际上,你是对的@marc_s。我需要这个。但我无法将 XML 值转换为文本。我从表中获取 xml 值。
  • @mordeby:不确定你的意思 - 这个 IS 来自 XML 数据类型列 - 它不是“文本”...... .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多