2009-10-28 5 views
6

이전 text/ntext/image 유형 열을 varchar/nvarchar/varbinary로 변환하는 SQL 데이터 업데이터를 작성하고 있습니다. 업데이터는 시스템이 부팅되어 이전 버전의 데이터베이스를 업데이트 할 때 트랜잭션 내에서 실행됩니다. 나는 SQL을 독자적으로 작동 시키려고했지만 소수의 컬럼이 전체 텍스트 인덱싱되었다. 즉 인덱스를 먼저 삭제하지 않고 유형을 변경할 수 없다는 것을 의미한다 :트랜잭션 내의 전체 텍스트 인덱싱 된 열 변경

ALTER FULLTEXT INDEX ON Table DROP (Column)
exec dbo.ConvertDataType 'Table', 'Column', 'nvarchar(max)'
ALTER FULLTEXT INDEX ON Table ADD (Column)

문제는 "ALTER FULLTEXT INDEX 문을 사용자 트랜잭션 내에서 사용할 수 없습니다."오류 때문에 첫 번째 행이 데이터 업데이터에서 작동하지 않습니다. 거래 내에서이를 가능하게 할 방법이 있습니까? 이 코드를 작동 시키거나 색인을 다른 유형으로 변경하는 방법이 있습니까?

답변

9

아니요. 많은 DDL 변경 사항은 롤백을 보장 할 수 없기 때문에 트랜잭션 컨텍스트에서 작동하지 않습니다. 성명서가 내부 데이터베이스 메타 데이터를 수정하는 한 롤백은 일반적인 데이터베이스 테이블 롤백 업데이트로 처리되므로 트랜잭션 내부에서 지원 될 수 있습니다. 그러나 파일, 열린 소켓을 생성하고 전체 텍스트 인덱싱 서비스와 같은 외부 서비스에 연결하는 문은 롤백 할 수 없으므로 트랜잭션 내에서 지원되지 않습니다.

관련 문제