문제

나는 가지고있는 테이블이 있습니다 ntext 필드. MSDN 그렇게 말합니다 ntext 더 이상 사용되지 않고 다른 데이터 유형을 제안합니다.

NTEXT, 텍스트 및 이미지 데이터 유형은 향후 Microsoft SQL Server 버전에서 제거됩니다. 새로운 개발 작업에서 이러한 데이터 유형을 사용하지 말고 현재 사용하는 응용 프로그램을 수정할 계획입니다. NVARCHAR (MAX), VARCHAR (MAX) 및 VARBINARY (MAX)를 대신 사용하십시오.

내 특별한 경우에는 전환하기로 결정했습니다. varbinary(max). 테이블 정의를 변경하려고했지만 작동하지 않았습니다.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);

유형을 변경할 가능성은 무엇입니까? varbinary(max)? 나는 유형을 변경하려고 시도했다 ntext -> nvarchar(max) 그리고 나서 nvarchar(max) -> varbinary(max) 그러나 이는 불가능합니다 (오류 : 데이터 유형 NVARCHAR (max)에서 varbinary (max) 로의 암시 적 변환은 허용되지 않습니다).

유일한 작업 솔루션은 새 유형 열을 추가하는 것입니다. varbinary(max), 기존 값을 새 열로 변환 한 다음 이전 열을 떨어 뜨립니다. 이것은 너무 많은 시간이 걸립니다 (약 15GB의 데이터 세트에서 약 30 분이 소요됩니다). 그렇기 때문에 동일한 것을 달성 할 수있는 다른 가능성을 조사하고 있습니다 (데이터 및 변환없이 내장 = 내내 = 가능).

도움이 되었습니까?

해결책

Ntext 열에 비 텍스트 데이터가 있었기 때문에 Varbinary (Max)와 함께 갔다고 가정합니다. 이 경우 테이블에 별도의 varbinary (max) 열을 추가 한 다음 전환 작업을 실행하여 NText에서 새 열로 복사해야합니다. 그런 다음 이전 열을 삭제하고 새 열을 이전 이름으로 바꾸십시오.

"데이터 유형에서 NVARCHAR (MAX)에서 VARBINARY (MAX) 로의 암시 적 변환은 허용되지 않습니다."는 변환에 대해 명시해야한다는 것을 의미합니다.

다른 팁

이 변환이 어느 시점에서 일어날 것 같습니다. 검색하면 많은 사람들이 텍스트에서 Varchar (Max)로 가서 변환하는 데 20 분 이상이 걸린다는 것을 알게 될 것입니다. 몇 분 동안 조사한 후 2 센트가 있으므로 복음으로 받아들이지 마십시오.

테이블이 삽입물을 가져 오면 기존 데이터를 보유 테이블에서 변환 한 다음 테이블의 이름을 바꾸어 보유가 생산되도록 할 수 있습니다. 그런 다음 다운 타임 동안 이전 테이블에서 새로 만든 데이터를 이전하십시오.

업데이트를 처리하면 물론 상황이 더 복잡해집니다.

추가 열을 추가하는 것이 가장 좋은 방법 일 것입니다. 나는 위험을 줄이기위한 단계에서 이런 종류의 일을 선호합니다.

  1. varbinary (max)를 nullable로 추가하십시오
  2. 삽입 코드를 수정하여 두 열을 모두 채우십시오
  3. 여가 시간에 하룻밤 사이에 캐스트와 함께 업데이트 문을 실행하십시오.
  4. 기존 열에 대한 모든 코드 지원을 제거하고 새 열을 읽으십시오.
  5. 이전 열을 떨어 뜨리고 필요한 경우 새 열을 null로 변경하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top