对 XML 节点使用 SQL 局部变量

Use SQL local variable for a XML Node

我试图在 XML.modify 函数中传递一个局部变量作为我的 SQL 脚本中的一个节点,因为试图修改的 xml 是动态的。 请参阅下面的代码

DECLARE
    @XML VARCHAR(MAX) = 'ns:Messages/ns:T001.0_NewSPIDRequests/ns:T001.0_NewSPIDRequest/ns:D2009_SWConnectionRef'

;WITH XMLNAMESPACES('urn:bridgeall-com:cmaservice:data:v3' AS ns)
UPDATE XMLMessageFeeder
SET theXML.modify('replace value of (/ns:Submission/*[local-name(.) = sql:variable("@XML")]/text())[1] with ("New Value")')

SELECT theXML 
FROM XMLMessageFeeder

我遇到的问题是,如果我将替换设置如下,则上述内容不会更新该节点的值:

SET theXML.modify
             ('
                   replace value of (/ns:Submission/ns:Messages/ns:T001.0_NewSPIDRequests/ns:T001.0_NewSPIDRequest/ns:D2009_SWConnectionRef/text())[1]
                  with ("New Value")
             ')

这行得通。据我所知(很少)他们都传递相同的替换代码但使用变量似乎不起作用。

有人能指出我正确的方向吗?

编辑 答案可以在下面的评论中找到。

local-name(.) returns当前节点的名称。您不能使用 local-name(.) 与路径表达式进行比较。一次只有一个节点。