我正在尝试向子节点添加属性时收到字符串文字错误。如何修改我的代码以便成功添加属性。
declare @count int=(select mxGraphXML.value('count(/mxGraphModel/root/Cell/@Value )','nvarchar') from TABLE_LIST
where Table_ListID=1234 )
declare @index int=1;
while @index<=@count
begin
declare @Value varchar(100)= @graphxml.value('(/mxGraphModel/root/Cell/@Value )[1]','nvarchar');
SET @graphxml.modify('insert attribute copyValueID {sql:variable("@Value ")}
as first into (/mxGraphModel/root/Cell)['+convert(varchar,@index)+']');
end
set @index=@index+1;
end
答案 0 :(得分:0)
您正在使用addition operator您应该使用CONCAT功能的位置。所以
'insert attribute copyValueID {sql:variable("@Value ")}
as first into (/mxGraphModel/root/Cell)['+convert(varchar,@index)+']'
被强迫进入一个号码。尝试:
CONCAT('insert attribute copyValueID {sql:variable("@Value ")}
as first into (/mxGraphModel/root/Cell)[',convert(varchar,@index),']')
代替。
答案 1 :(得分:0)
Adam,您可以像这样在Microsoft T-SQL中做到这一点:
declare @sql nvarchar(max)
set @sql = 'set @myxml.modify(''
insert (
attribute scalableFieldId {sql:variable("@sf_id")},
attribute myTypeId {sql:variable("@my_type_id")}
) into (/VB/Condition/Field[@fieldId=sql:variable("@field_id")
and @fieldCode=sql:variable("@field_code")])['+
cast(@instance as varchar(3))+']'')'
exec sp_executesql
@sql
,N'@myxml xml output, @field_code varchar(20),
@field_id varchar(20), @sf_id int, @my_type_id tinyint'
,@myxml = @myxml output
,@field_code = @field_code
,@field_id = @field_id
,@sf_id = @sf_id
,@my_type_id = @my_type_id
看看我在这里做了什么?这只是动态SQL的巧妙用法,用于克服Microsoft的“字符串文字错误”的常见限制。
重要说明:是的,您可以通过在某些地方使用sql:variable()来做到这一点,但祝您好运,请尝试在方括号内的节点号限定符中使用它!如果没有设计的动态SQL,就无法做到这一点!
窍门实际上不是我的,我把头撞在墙上一会儿后,我从https://www.opinionatedgeek.com/Snaplets/Blog/Form/Item/000299/Read得到了这个主意。
如果我的样本无效或不清楚,请随时提问。