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

SQL Server 2016解析导入XML数据返回空结果问题咨询

解决方案

你查询返回空结果的核心原因是XML带有wd前缀的自定义命名空间,但原查询语句未声明对应命名空间,导致XPath路径无法匹配到目标节点。

修复后的完整查询代码

-- 声明XML中使用的自定义命名空间,必须和XML头部定义的URI完全一致
WITH XMLNAMESPACES ('urn:com.workday.report/Worker_Details_-_EXPORT_-_Workplace' AS wd)
SELECT  
    ReportEntry.value('(wd:Active_Status)[1]', 'VARCHAR(20)') AS ActiveStatus,
    -- 需要读取其他字段可按下方格式新增
    ReportEntry.value('(wd:Legal_Name_-_First_Name)[1]', 'VARCHAR(50)') AS FirstName,
    ReportEntry.value('(wd:Position)[1]', 'VARCHAR(100)') AS Position
FROM
    (SELECT 
         CAST(XMLCol AS XML) AS XMLContent
     FROM 
         OPENROWSET(BULK '\\afcn2011\root\DATA\VisualCron\Employee Export\EmployeeExport.xml', SINGLE_BLOB) AS T(XMLCol)
    ) AS T
CROSS APPLY 
    XMLContent.nodes('wd:Report_Data/wd:Report_Entry') AS XMLCol(ReportEntry);

关键修改点说明

  • 新增WITH XMLNAMESPACES声明wd前缀对应的命名空间URI,和XML根节点定义的内容完全一致
  • 所有XPath路径中的节点都添加了wd:前缀,和XML节点的命名空间匹配
  • 直接使用value()方法读取节点值,省略冗余的query()调用,同时加[1]指定读取匹配到的第一个节点值,符合SQL Server XML查询的语法要求
  • 调整了别名避免重名冲突,降低报错概率

额外注意事项

  • 确保SQL Server服务的运行账号对XML文件所在的网络共享路径有读取权限,否则会触发文件访问类报错
  • 如果部分节点在某些Report_Entry中不存在,查询会返回NULL,属于正常情况
  • 日期类字段建议直接转为DATE或DATETIME类型存储,示例:ReportEntry.value('(wd:Hire_Date)[1]', 'DATETIME') AS HireDate

内容的提问来源于stack exchange,提问作者Femmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:12:03