SQL Server: как использовать modify () для изменения данных XML в столбце с типом данных TEXT - PullRequest
3 голосов
/ 20 февраля 2010

Я пытаюсь изменить некоторые значения XML в базе данных.Я могу заставить его работать со столбцами, содержащими XML, которые используют тип данных XML.Однако я не могу заставить его работать со столбцами TEXT.

Кроме того, я могу ВЫБРАТЬ данные XML по столбцам TEXT (используя CAST () для преобразования их в XML), но все еще не могу ОБНОВИТЬ.

Пример:

UPDATE [xmltest]  
SET [xmltext].modify('replace value of (/data/item[1]/text())[1] with "newvalue"')

Ошибка: невозможно вызвать методы для текста.

Есть ли какой-нибудь способ заставить это работать со столбцом TEXT?Там уже хранятся тонны данных, поэтому я бы предпочел не запрашивать изменение типа данных в столбце.

Спасибо!

Sunsu

1 Ответ

11 голосов
/ 20 февраля 2010

Вы не можете напрямую изменить это - вы можете сделать это в три этапа:

  • выберите столбец TEXT из таблицы в локальную переменную XML
  • изменить переменную XML
  • записать ваши изменения в базу данных

Примерно так:

-- declare new local variable, load TEXT into that local var
DECLARE @temp XML

SELECT 
     @temp = CAST(YourColumn AS XML) 
FROM 
     dbo.YourTable
WHERE
     ID = 5     -- or whatever criteria you have

-- make your modification on that local XML var
SET 
   @temp.modify('replace value of (/data/item[1]/text())[1] with "newvalue"') 

-- write it back into the table as TEXT column      
UPDATE 
   dbo.YourTable
SET 
   YourColumn = CAST(CAST(@temp AS VARCHAR(MAX)) AS TEXT)
WHERE
     ID = 5     -- or whatever criteria you have

Это немного запутанно, но работает! :-)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...