【发布时间】:2020-10-09 00:00:33
【问题描述】:
我有如下的sn-p SQL:
declare @idx int = 1
while (@idx <= @NumThresholds)
begin
declare @strIdx nvarchar(100) = convert(varchar(100), @idx)
declare @xqueryString nvarchar(max) = concat('replace value of (//*:ElecTariffElements/*:ThresholdMatrix/*:Thresholds/*:BlockThreshold/text())[', @strIdx, '] with "0"')
set @xml.modify(@xqueryString)
set @idx = @idx + 1
end
我想更新BlockThreshold 元素的每个值。
但是我得到了错误:
XML 数据类型方法“modify”的参数 1 必须是字符串字面量。
我也尝试过像这样使用sql:variable("@strIdx"):
declare @idx int = 1
while (@idx <= @NumThresholds)
begin
declare @strIdx nvarchar(100) = convert(varchar(100), @idx)
set @xml.modify('replace value of (//*:ElecTariffElements/*:ThresholdMatrix/*:Thresholds/*:BlockThreshold/text())[sql:variable("@strIdx")] with "0"')
set @idx = @idx + 1
end
但是这之后我得到了这个错误:
XQuery [modify()]: 只有 'http://www.w3.org/2001/XMLSchema#decimal?', 'http://www.w3.org/2001/XMLSchema#boolean?'或 'node()*' 表达式允许作为谓词,找到 'xs:string ?'
我只想遍历元素并替换值,但这似乎比我预期的要困难得多。
非常感谢任何帮助!
【问题讨论】:
标签: sql-server xquery string-literals