SQL Server XML modify方法中使用substring函数报错的问题咨询
SQL Server XML modify方法中使用substring函数报错的问题咨询
你好呀,我来帮你排查这个语法错误的问题~
首先看你给出的简化版SQL,报错的核心原因是你用text(substring(...))这种写法不符合XQuery的语法规范:在XQuery里,substring()函数本身就会返回字符串类型的结果,不需要再用text()函数去包裹它,这种多余的嵌套直接导致了语法解析失败,数据库引擎在遇到substring时找不到预期的右括号,所以抛出了那个错误。
我们来修正一下简化版的SQL,调整后应该是这样的:
UPDATE zamowienia_xml SET tresc_xml.modify(' replace value of (/zamowienie/profil_rabatowy/rabat/text())[1] with ( if (1=1) then substring("abcd", 1, 2) else "0" )');
关键调整点:
- 去掉了多余的
text()包裹,直接使用substring("abcd", 1, 2)作为then分支的返回值 - 保证if语句的结构完整,每个分支的返回值都是字符串类型,符合
replace value with对值类型的要求
再说说你提到的完整版SQL,需要注意几个细节:
- 调用
substring处理现有XML节点值时,要确保节点路径正确,比如(/zamowienie/profil_rabatowy/rabat/text())[1]能正确取到目标文本 string-length()函数的参数要补全,你写的string-length(...要把省略的节点路径补充完整,比如string-length((/zamowienie/profil_rabatowy/rabat/text())[1])
这样调整后,语法解析的问题就能解决啦,你可以试试修改后的语句~
备注:内容来源于stack exchange,提问作者Marcin Knapik
相关产品推荐
相关产品推荐

