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


101

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 개의 문을 새 솔루션으로 업데이트해야합니다.


SQL Server 2000입니까?
p.campbell 2010

답변 : 저는 SQL2008을 사용하고 있으며 DATABASE의 호환성 수준은 2000 (80)입니다. 2008 년에도 이것을 변경하면 작동합니까? 결과를 아직 알지 못하기 때문에 호환성 수준 2000으로 떠났지만 SQL 2008 Database입니다. 이 한 번에 변환입니다 ...
ETHEM

답변:


197

경우 데이터가 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%' 

3
두 번째 캐스트가 NText정말 필요한가요? 할당 NVarchar(MAX)하면 NText자동으로 캐스팅 될 것이라고 생각 합니다.
Tahir Hassan

3
아주 간단한 수정. 2005+ nvarchar (max)에는 4000 자 제한이 없습니다. 나는 그것이 명백하다는 것을 알고 있지만 (지금은 나에게), 두 답변 모두 그 한계가있는 것처럼 처음 읽었습니다.
goodeye

16

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

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

select cast(replace(cast(myntext as nvarchar(max)),'find','replace') as ntext)
from myntexttable
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.