Подтвердить что ты не робот

Могу ли я найти/заменить в t-sql?

У меня в основном есть столбец xml, и мне нужно найти и заменить одно значение тега в каждой записи.

4b9b3361

Ответ 1

Для чего-то реального, я бы пошел с xpaths, но иногда вам просто нужно быстрое и грязное решение:

Вы можете использовать CAST, чтобы превратить этот столбец xml в обычный varchar, а затем выполните обычную замену.

UPDATE xmlTable SET xmlCol = REPLACE( CAST( xmlCol as varchar(max) ), '[search]', '[replace]')

Тот же метод также делает поиск XML привязкой, когда вам нужно просто запустить быстрый запрос, чтобы найти что-то, и не хотите иметь дело с xpaths.

SELECT * FROM xmlTable WHERE CAST( xmlCol as varchar(max) ) LIKE '%found it!%'

Изменить: просто захотите немного обновить это, если вы получите сообщение в строках преобразования одного или нескольких символов из XML в целевое сопоставление невозможно, тогда вам нужно использовать nvarchar, который поддерживает unicode.

CAST( xmlCol as nvarchar(max) )

Ответ 2

Чтобы найти содержимое в столбце XML, просмотрите метод exist(), как описано в MSDN здесь.

SELECT * FROM Table
WHERE XMLColumn.exist('/Root/MyElement') = 1

... для замены используйте метод modify(), как описано здесь.

SET XMLColumn.modify('
  replace value of (/Root/MyElement/text())[1]
  with "new value"
')

.. все предполагают SqlServer 2005 или 2008. Это основано на XPath, которое вам нужно знать.

Ответ 3

update my_table
set xml_column = replace(xml_column, "old  value", "new value")