2013-10-14 3 views
1

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

Я получаю

Msg 8172, уровень 16, состояние 1, строка 5
Аргумент 1 метода типа данных XML "изменить" должен быть строковым.

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

+0

пример данных и желаемый результат будет хороший –

ответ

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

+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]') 
+0

с это выберите im, просто получив одну строку. с некоторым смешиванием с ответом римского пекара, получающим то, что мне нужно :) спасибо вам тоже! –

 Смежные вопросы

  • Нет связанных вопросов^_^