Вопрос

I have a SQL Server table with a XML column which got information in. I want to select whole ID's from this table and modify my another xml column.

My query is;

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;

I'm getting

Msg 8172, Level 16, State 1, Line 5
The argument 1 of the XML data type method "modify" must be a string literal.

Any help would be nice.

Это было полезно?

Решение

Are you sure you want to put the whole xml into attribute of Information1, like this:

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

Другие советы

Much as you are doing with the filtering, you need to use sql:variable. You can't build up a string inside a .modify function.

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]') 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top