[sql] text 또는 ntext 데이터 유형에 대한 REPLACE의 대안

datatable.column의 데이터를 업데이트 / 교체해야합니다. 테이블에는이라는 필드가 Content있습니다. REPLACE기능을 사용하고 있습니다. 열 데이터 유형이 NTEXT이므로 SQL Server에서는 REPLACE함수 를 사용할 수 없습니다 .

이 데이터베이스는 타사 소프트웨어 테이블이므로 데이터 유형을 변경할 수 없습니다. 데이터 유형을 변경하면 응용 프로그램이 실패합니다.

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = REPLACE(Content,'ABC','DEF') 
WHERE Content LIKE '%ABC%' 

이 오류가 발생합니다.

메시지 8116, 수준 16, 상태 1, 줄 1 인수 데이터 형식 ntext가 바꾸기 함수의 인수 1에 대해 잘못되었습니다.

  • T-SQL로이 문제를 해결할 수 있습니까? 누군가 읽고 반복하는 방법에 대한 예가 있습니까?
  • 이것은 일회성 변환이므로 다른 유형으로 변경할 수는 있지만 데이터가 엉망이 될 것 같습니다.

기본 키 필드가 있습니다. 이름 : ID-정수-ID입니다 …. 그래서 이것도 생각해야합니다. ID를 N 임시로 설정할 수 있습니다.

REPLACE 기능을 달성하는 방법에 대해 조언 해주십시오.

대략. 3000 개의 문을 새 솔루션으로 업데이트해야합니다.



답변

경우 데이터가 4000 자 오버 플로우하지 않습니다 그리고 당신은 SQL Server 2000 또는 2000 8 또는 SQL 서버의 호환성 수준에있어 :

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(4000)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 

SQL Server 2005+의 경우 :

UPDATE [CMS_DB_test].[dbo].[cms_HtmlText] 
SET Content = CAST(REPLACE(CAST(Content as NVarchar(MAX)),'ABC','DEF') AS NText)
WHERE Content LIKE '%ABC%' 


답변

SQL Server 2000을 가정하면 다음 StackOverflow 질문 이 문제를 해결해야합니다.

SQL Server 2005/2008을 사용하는 경우 다음 코드를 사용할 수 있습니다 ( 여기 에서 가져옴 ).

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable


답변