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

Откуда:
Сообщений: 86
Блог
Нужно проапдейтить XML поле. XML грубо говоря имеет такой вид
<Entities>
<entity @name = "www" @value = "111">
<entity @name = "www" @value = "111">
</Entities>
3 ноя 09, 14:35    [7877082]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
amakhin
Нужно проапдейтить XML поле. XML грубо говоря имеет такой вид
<Entities>
<entity @name = "www" @value = "111">
<entity @name = "www" @value = "111">
</Entities>
update table set xmlfield = '<Entities>
<entity @name = "www" @value = "111">
<entity @name = "www" @value = "111">
</Entities>'
3 ноя 09, 14:40    [7877117]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
amakhin
Member

Откуда:
Сообщений: 86
Блог
Извините случайно отправил

Нужно проапдейтить XML поле в таблице. Естественно у всех записей.
XML грубо говоря имеет такой вид
<Entities>
<entity @name = "www" @type = "date" @value = "1/1/2009"/>
<entity @name = "qqq" @type="date" @value = "2/2/2009"/>
<entity @name = "ttt" "@type= "user" @value = "john"/>
</Entities>

И нужно проапдетить все ноды у которых тип дата, изменив формат даты на "dd-MMM-yyyy"

Можно ли это сделать без использования курсора?
3 ноя 09, 14:42    [7877131]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
amakhin
Member

Откуда:
Сообщений: 86
Блог
alexeyvg, неплохой вариант :-) только то был неполный вопрос
3 ноя 09, 14:43    [7877139]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
amakhin
alexeyvg, неплохой вариант :-) только то был неполный вопрос

:-)
amakhin
Можно ли это сделать без использования курсора?

Думаю, можно. Не силён в XML DML, но типа того:
update таблица
set поле.modify('replace value of (/Entities/entity/@value)[1] 
with (
       if (count(/Entities/entity/@type) = "date") then
         "3/3/2009"
      )
')
where условия
3 ноя 09, 15:23    [7877456]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Извращение:
Реляционные данные хранить в xml, да ещё и безтипово (не xs:date).

Придётся произвести столько UPDATE-ов скока максимальное число entity с датами.
3 ноя 09, 16:06    [7877831]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
Mnior
Извращение:
Реляционные данные хранить в xml, да ещё и безтипово (не xs:date).

Придётся произвести столько UPDATE-ов скока максимальное число entity с датами.
Ага, точно.

Но может это работа с какими то внешними данными - тогда приходится...
3 ноя 09, 16:17    [7877902]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
amakhin
Member

Откуда:
Сообщений: 86
Блог
alexeyvg, так не катит
3 ноя 09, 16:18    [7877909]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
amakhin
Member

Откуда:
Сообщений: 86
Блог
Mnior, до этого я тоже дошёл.
Сделать курсор, в который выбрать все нужные записи, а потом цикл с UPDATE.
Полдня долбился пытаясь придумать какой-то метод хотя бы со временной таблицей, но без цикла.
Кстати не вижу разницы для этой задачи будь там xs:date.
3 ноя 09, 16:22    [7877933]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
amakhin
alexeyvg, так не катит
Я говорю, что не спец в XML DML

Или изучайте, или как то по другому.

Но помните, что цикл в крайнем случае можно заменить на case.

можно даже XML DML заменить на преобразование в текст и реплейс в тексте
3 ноя 09, 16:25    [7877956]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
amakhin
Mnior, до этого я тоже дошёл.
Сделать курсор, в который выбрать все нужные записи, а потом цикл с UPDATE.
Как я понимаю, не цикл по записям, а цикл по одинаковым строчкам
/Entities/entity/@value)[1]
/Entities/entity/@value)[2]
3 ноя 09, 16:35    [7878023]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
amakhin
Member

Откуда:
Сообщений: 86
Блог
alexeyvg, да для каждого узла с датой одна итерация, если запись содержит XML в котором пять узлов с датой, то для него придется сделать пять итераций
3 ноя 09, 17:20    [7878368]     Ответить | Цитировать Сообщить модератору
 Re: Update XML column  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
amakhin
alexeyvg, да для каждого узла с датой одна итерация, если запись содержит XML в котором пять узлов с датой, то для него придется сделать пять итераций
Да, то есть для всех записей таблицы 5 итераций.
3 ноя 09, 21:15    [7879300]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить