You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询带epcis、dts命名空间的XML转数据表报错如何解决

解决方案

报错的核心原因是SQL Server执行XML XQuery时,必须显式声明XML中用到的命名空间,才能在查询路径中使用对应的前缀。你只需要在查询前声明epcis和dts两个命名空间,同时在查询路径中补全对应前缀即可,修改后的完整代码如下:

BEGIN
    DECLARE @archivo XML
    SET @archivo = (
        '<?xml version="1.0" encoding="utf-8"?>
            <epcis:EPCISDocument xmlns:dts="urn:dts:extension:xsd" schemaVersion="1.2" creationDate="2021-06-30T07:29:32.6511940Z"
                xmlns:epcis="urn:epcglobal:epcis:xsd:1">
                <EPCISBody>
                    <EventList>
                        <ObjectEvent>
                            <eventTime>2021-06-30T07:29:32</eventTime>
                            <eventTimeZoneOffset>+02:00</eventTimeZoneOffset>
                            <action>OBSERVE</action>
                            <bizStep>code</bizStep>
                            <dts:epcItemList>
                                <item>
                                    <epc>123456789</epc>
                                    <code>123456789zz</code>
                                </item>
                                <item>
                                    <epc>9687654321</epc>
                                    <code>9687654321zz</code>
                                </item>
                                <item>
                                    <epc>147258369</epc>
                                    <code>147258369zz</code>
                                </item>
                            </dts:epcItemList>
                        </ObjectEvent>
                    </EventList>
                </EPCISBody>
            </epcis:EPCISDocument>'
    )

    -- 显式声明命名空间,URI需和XML内定义的完全一致
    ;WITH XMLNAMESPACES (
        'urn:epcglobal:epcis:xsd:1' AS epcis,
        'urn:dts:extension:xsd' AS dts
    )
    SELECT 
        patch.r.value('(epc)[1]', 'varchar(100)') as [epc],
        patch.r.value('(code)[1]', 'varchar(100)') as [code]
    FROM  
        -- 路径补全对应节点的命名空间前缀
        @archivo.nodes('epcis:EPCISDocument/EPCISBody/EventList/ObjectEvent/dts:epcItemList/item') AS patch(r)
END 
GO

执行后输出结果如下:

epccode
123456789123456789zz
96876543219687654321zz
147258369147258369zz

内容的提问来源于stack exchange,提问作者Juan Gómez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:39:00