我有一个带有XML
列的SQL Server表,其中包含信息。我想从此表中选择整个ID并修改我的另一个xml列。
我的查询是;
declare @name nvarchar(max);
set @name = 'mark';
update table1
set table1.Information1.modify('insert <s n="' + cast((select cast(table2.Information2 as varchar(100))
from table2
where table2.Information2.exist('/r/s[@n=sql:variable("@name")]') = 1) as varchar(400)) + '"/> into (/r)[1]') where table1.Name = @name;
我正在
Msg 8172,Level 16,State 1,Line 5
XML数据类型方法“modify”的参数1必须是字符串文字。
任何帮助都会很好。
答案 0 :(得分:0)
就像你在进行过滤一样,你需要使用sql:variable
。您无法在.modify
函数内构建字符串。
declare @newData xml
select @newData = '<s n="' +
cast(table2.Information2 as varchar(100))
+ '"/>'
from table2
where table2.Information2.exist('/r/s[@n=sql:variable("@name")]') = 1
update table1 set Information1.modify('insert sql:variable("@newData") into (/r)[1]')
答案 1 :(得分:0)
您确定要将整个xml放入Information1
的属性中,如下所示:
declare @name nvarchar(max), @data xml
select @name = 'mark'
select cast(Information2 as varchar(100)) as n
from table2 as t
where t.Information2.exist('/r/s[@n=sql:variable("@name")]') = 1
for xml raw('s')
update table1 set Information1.modify('insert sql:variable("@data") into (/r)[1]')
<强> sql fiddle demo 强>