Изменение столбца XML с помощью запроса выбора

У меня есть таблица SQL Server со столбцом XML, в котором есть информация. Я хочу выбрать целые идентификаторы из этой таблицы и изменить другой столбец 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
Аргумент 1 метода "изменить" типа данных XML должен быть строковым литералом.

Любая помощь будет приятно.


person fle.    schedule 14.10.2013    source источник
comment
пример данных и желаемый результат были бы хорошими   -  person Roman Pekar    schedule 14.10.2013


Ответы (2)


Вы уверены, что хотите поместить весь 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

person Roman Pekar    schedule 14.10.2013

Как и в случае с фильтрацией, вам нужно использовать 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]') 
person podiluska    schedule 14.10.2013
comment
с этим выбором я просто получаю одну строку. с некоторым смешением с ответом Романа Пекара я получаю то, что мне нужно :) и вам спасибо! - person fle.; 14.10.2013