2010-02-19 4 views
3

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

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

Пример:

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

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

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

Спасибо!

Sunsu

ответ

11

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

  • выберите столбец 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 

Это немного связано, но оно работает! :-)

Смежные вопросы