1

我有一个 SQL Server 表,XML其中有一列获取信息。我想从该表中选择整个 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;

我越来越

消息 8172,级别 16,状态 1,第 5 行
XML 数据类型方法“修改”的参数 1 必须是字符串文字。

你能帮忙的话,我会很高兴。

4

2 回答 2

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

于 2013-10-14T16:52:36.853 回答
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]') 
于 2013-10-14T16:45:46.493 回答