在xquery中修改sql server xml元素名称变量

evb*_*ell 5 xml sql xquery

我需要元素的名称也是一个变量(是程序的参数)

而不是这个,哪个工作正常:

DECLARE @VAR VARCHAR(5)
SET @VAR = 'false'
UPDATE CURVES
  SET CURVEENTITY.modify(
    'replace value of (/ElementName/text())[1] with  sql:variable("@VAR")') 
  WHERE ID = 3
Run Code Online (Sandbox Code Playgroud)

但我想要这样的事情:

DECLARE @VAR VARCHAR(5)
DECLARE @VAR2 VARCHAR(20)
SET @VAR = 'false'
SET @VAR2 = 'ElementName'
UPDATE CURVES
  SET CURVEENTITY.modify(
    'replace value of (/sql:variable("@VAR2")/text())[1] with sql:variable("@VAR")') 
  WHERE ID = 3
Run Code Online (Sandbox Code Playgroud)

但它不起作用!我怎样才能做到这一点?

Mik*_*son 7

您可以local-name()在谓词中使用以查找要修改的节点.

declare @var2 varchar(50) = 'ElementName'
declare @var varchar(50) = 'false'

update CURVES
set CURVEENTITY.modify('replace value of ((*[local-name() = sql:variable("@var2")]/text())[1]) 
                        with sql:variable("@var")')
where ID = 3
Run Code Online (Sandbox Code Playgroud)