对 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(.)
与路径表达式进行比较。一次只有一个节点。
我试图在 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(.)
与路径表达式进行比较。一次只有一个节点。