-1

我在 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>

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

4

1 回答 1

0

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

也许是这样的??我只是在<parameter>节点上迭代并输出我能想到的所有相关信息,作为一个关系数据集:

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 请求类 参数名称 参数类型 参数值
1 得到所有 系统 System.Boolean 真的
1 得到所有 确认日期 系统日期时间 2021-05-04 00:00:00.000
1 得到所有 确认时间 系统日期时间 2021-05-04 00:00:00.000
于 2021-05-24T14:19:59.337 回答