使用Select Query修改XML列

时间:2013-10-14 16:35:34

标签: sql sql-server xml select sqlxml

我有一个带有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必须是字符串文字。

任何帮助都会很好。

2 个答案:

答案 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