2010-02-19 2 views
3

데이터베이스의 일부 XML 값을 수정하려고합니다. XML 데이터 형식을 사용하는 XML이 포함 된 열에서 작동하도록 할 수 있습니다. 그러나 TEXT 열에서 작업 할 수 없습니다.SQL Server : modify()를 사용하여 TEXT 데이터 형식의 열에서 XML 데이터를 변경하는 방법

또한 XML 데이터를 TEXT 열 (CAST()을 사용하여 XML로 변환)에서 SELECT 할 수 있지만 여전히 UPDATE 할 수는 없습니다.

예 :

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

오류 : 텍스트의 메소드를 호출 할 수 없습니다.

TEXT 열에서이 작업을 수행 할 수있는 방법이 있습니까? 이미 저장된 TONS 데이터가 있으므로 열의 데이터 유형을 변경하라는 요청을하지 않아도됩니다.

감사합니다.

Sunsu는

답변

11

당신은 직접 수정할 수 없습니다 - 당신이 할 수있는 것은 세 단계 프로세스입니다

  • 는 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 

다소 복잡하지만 작동합니다. :-)

관련 문제