Могу ли я найти / заменить в T-SQL? - PullRequest
23 голосов
/ 05 октября 2008

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

Ответы [ 3 ]

39 голосов
/ 23 июня 2011

Для чего-то реального, я бы пошел с 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, который поддерживает юникода.

CAST( xmlCol as nvarchar(max) )

16 голосов
/ 05 октября 2008

Чтобы найти содержимое в столбце 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, который вам нужно знать.

0 голосов
/ 05 октября 2008
update my_table
set xml_column = replace(xml_column, "old  value", "new value")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...