SQL Server导入XML数据至表出现空记录,请求排查代码问题
XML导入SQL Server字段为空的问题排查与修复
你的代码能生成行但记录为空,核心是XPath定位和方法使用错误,具体问题和修正方案如下:
问题分析
- 错误使用
query方法:CompanyName是<Addressee>节点的属性而非子元素,query('CompanyName')无法定位到目标内容,属于无意义调用。 - XPath路径上下文错误:通过
CROSS APPLY MY_XML.nodes('Publication/Addressee')后,Pub已经指向每个独立的<Addressee>节点,此时不需要再从根节点Publication/Addressee开始定位属性。
修正后的代码
INSERT INTO XMLCommTest (CompanyName) SELECT Pub.value('@CompanyName', 'VARCHAR(250)') FROM (SELECT CAST(MY_XML AS xml) FROM OPENROWSET(BULK 'C:\cfs\XMLCommTest\LBA0_Comm_Stmts_305741_202301310000.txt', SINGLE_BLOB) AS T(MY_XML)) AS T(MY_XML) CROSS APPLY MY_XML.nodes('Publication/Addressee') AS MY_XML (Pub);
关键修改说明
- 移除了多余的
query('CompanyName')调用,直接通过value方法读取属性值。 - 将XPath路径改为
@CompanyName,利用Pub的节点上下文直接获取当前<Addressee>的CompanyName属性。
内容的提问来源于stack exchange,提问作者Jessica Nutt
相关产品推荐
相关产品推荐

