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

Откуда:
Сообщений: 21
Есть таблица с полем типа ntext в котором хрянятся фрагменты xml...
пример:
<r id="123" <date>12-05-2015</date><color>red</color><isdelete>true</isdelete></r>

подскажите как выбрать из этого поля все строки содержащие значение red в теге <color>
и заменить в тегах <isdelete> этих строк на значение false????
24 май 11, 15:40    [10700871]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
поиск
24 май 11, 15:49    [10700935]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Bambuck
Member

Откуда:
Сообщений: 21
Maxx,
данные храняться в формате ntext
24 май 11, 15:56    [10700990]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @t table (i ntext )
insert into @t values (N'<root>123</root>')
declare @x xml
select @x = CAST( i as XML) from @t
select a.x.value('.' , 'integer')
from @x.nodes('/root') a (x)

а что приведение типов уже отменили ?
24 май 11, 16:12    [10701142]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Если вы храните данные как чёрный ящик, то изменение этих данных дело клиента, а не сервера.
Bambuck
данные храняться в формате ntext
И что поменять тип слабо?

DECLARE	@Table TABLE (Data NText)
INSERT  @Table VALUES
 (N'<r id="123"><date>12-05-2015</date><color>red</color><isdelete>true</isdelete></r>')
,(N'<r id="123"><date>12-05-2015</date><color>black</color><isdelete>true</isdelete></r>')
--------------------------------------------------------------------------------
UPDATE	T
SET	Data = Convert(NText,Convert(NVarChar(max),X.Data.query('element r { /r/@* , /r/*[local-name() != "isdelete"], element isdelete {"false"} }')))
FROM	@Table T CROSS APPLY (SELECT Convert(XML,T.Data))X(Data)
WHERE	X.Data.exist('/r/color[text() = "red"]') = 1
--------------------------------------------------------------------------------
SELECT * FROM @Table
Если вам там что-то затрёт, это ваши проблемы (как описали задачу то и получайте).
24 май 11, 17:45    [10701867]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Bambuck
Member

Откуда:
Сообщений: 21
Mnior,

Вы написали правильно, и за это спасибо огромное... Но это значит мне нужно взять ячейку с данными перенести её во временную таблицу, поменять тип этих данных, исправить то что нужно и заново залить в исходную таблицу???
25 май 11, 08:11    [10703653]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Bambuck
Но это значит мне нужно взять ячейку с данными перенести её во временную таблицу, поменять тип этих данных, исправить то что нужно и заново залить в исходную таблицу???
Нет не нужно. Смотрите внимательней.
Подставьте для наглядности:
INSERT  @Table VALUES
 (N'<r id="123"><date>12-05-2015</date><color>red</color><isdelete>true</isdelete></r>')
,(N'<r id="321"><date>21-05-2051</date><color>red</color><isdelete>false</isdelete></r>')
,(N'<r id="456"><date>01-06-2001</date><color>red</color><isdelete>true</isdelete></r>')

Может вы условие задачи неправильно описали?
25 май 11, 10:23    [10704269]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Bambuck
Member

Откуда:
Сообщений: 21
Mnior, При изменении данных в фрагменте xml строка с этим тегом добавляется в конец фрагмента....
31 май 11, 10:13    [10736629]     Ответить | Цитировать Сообщить модератору
 Re: выборка и редактирование полей содержащих xml-фрагменты  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Bambuck
При изменении данных в фрагменте xml строка с этим тегом добавляется в конец фрагмента....
Э, И?
1. Была в конце, там и осталась.
2. Какая к чёрту разница?!

Если хотите чёткий формат xml (порядок последовательности элементов, атрибутов), используйте Xml коллекции.

Если вам делать совсем нечего: Можете зафигачить во временную таблу с XML колонкой, затем modify('replace value of ...'), затем обратно.
31 май 11, 11:26    [10737185]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить