SQL Server中更新带命名空间的XML字段内邮箱地址失败如何解决
问题原因
- XPath路径错误:你编写的路径将
Value作为Key的子节点,但实际二者是同级节点,均为KeyValueOfstringanyType的直接子元素 - 未声明默认命名空间:你的XML根节点定义了默认命名空间,必须在XML DML语句中显式声明才能匹配到对应节点
正确修改脚本
推荐使用带筛选条件的写法,确保只修改键为Email对应的值,容错性更高:
WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/2003/10/Serialization/Arrays') UPDATE t SET XMLColumn.modify('replace value of (/ArrayOfKeyValueOfstringanyType/KeyValueOfstringanyType[Key="Email"]/Value/text())[1] with "dwight@staples.com"') -- 建议补充WHERE条件限定需要修改的行,避免全表更新
附加说明
你之前的脚本提示行受影响但XML未修改,是因为XPath没有匹配到任何节点,SQL Server的XML.modify方法在匹配不到节点时不会抛出错误,也不会修改XML内容,但UPDATE语句本身仍会返回受影响行数。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

