Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 modify xml  [new]
marvel
Member

Откуда:
Сообщений: 1066
Здравствуйте
declare @t table (id int,value varchar(50)) insert into @t values (2,'причина_1'),(3,'причина_2')
declare @id int = 3,@value varchar(50) = 'причина'
declare @x xml = '<Message >
<Serv Id="1" State="ok" />
<Serv Id="2" State="error" />
<Serv Id="3" State="ok" />
</Message>'


set @x.modify('insert attribute value {sql:variable("@value")}into (Message/Serv[@Id= sql:variable("@id")])[1]')
select @x


вопрос - можно ли как то без курсора и переменных изменить хмл на основании таблицы @t ?
В примере выше я изменяю хмл из переменных, а хочется одним запросом сделать красиво)
Спасибо.
30 окт 17, 11:53    [20911372]     Ответить | Цитировать Сообщить модератору
 Re: modify xml  [new]
aleks222
Guest
Дык,
1. Разбираем xml в таблицу (правильнее - в табличное представление).
2. Меняем фсе чего душеньке угодно.
3. Собираем взад.
30 окт 17, 12:14    [20911470]     Ответить | Цитировать Сообщить модератору
 Re: modify xml  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @t TABLE (id INT, val NVARCHAR(50))
INSERT INTO @t VALUES (2, N'причина_1'), (3, N'причина_2')

DECLARE @x XML = '
<Message >
    <Serv Id="1" State="ok" />
    <Serv Id="2" State="error" />
    <Serv Id="3" State="ok" />
</Message>'

SELECT t.[@Id]
     , t.[@State]
     , [@Value] = t2.val
FROM (
    SELECT [@Id] = t.c.value('@Id', 'INT')
         , [@State] = t.c.value('@State', 'NVARCHAR(50)')
    FROM @x.nodes('*/*') t(c)
) t
LEFT JOIN @t t2 ON t.[@Id] = t2.id
FOR XML PATH('Serv'), ROOT('Message')
30 окт 17, 12:26    [20911504]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить