[英]Modify sql server xml element name variable in 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
但我想要这样的事情:
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
但它不起作用! 我怎样才能做到这一点?
您可以在谓词中使用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
AFAIK你无法使用xquery
的/sql:variable
动态地动态组合路径 - 你可以将路径构建为字符串,然后使用动态sql来执行它(在这种情况下,你也可以替换两个sql:variables
)。
例如
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'UPDATE CURVES
SET CURVEENTITY.modify(''replace value of (/' + @var2
+ '/text())[1] with "' + @var + '"'')
WHERE ID = 3';
exec sp_executesql @sql;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.