2009-10-05 6 views
45

트랜잭션 내에서 SQL "truncate table"명령을 사용할 수 있습니까? 나는 앱을 만들고 테이블에는 엄청난 양의 기록이있다. 모든 레코드를 삭제하고 싶지만 앱이 실패하면 트랜잭션을 롤백해야합니다. 각 레코드를 삭제하는 데는 매우 오랜 시간이 걸립니다. truncate table을 사용하면 트랜잭션을 롤백하고 실패 할 경우 다시 데이터를 가져올 수 있는지 궁금합니다. truncate table은 트랜잭션 로그에 각 delete를 쓰지 않는다는 것을 알지만, 롤백이 작동하도록 로그에 페이지 할당을 기록하는지 궁금합니다.트랜잭션 내에서 테이블 잘라 내기

+1

MSSQL 2005 서버를 사용하고 있음을 분명히해야합니다. –

답변

44

SQL Server에서는 트랜잭션에서 TRUNCATE를 롤백 할 수 있습니다. 언급 한대로 페이지 할당 해제를 로그에 기록합니다.

+0

감사합니다. 선생님. –

15

Oracle에서 TRUNCATE TABLE은 트랜잭션에서 사용할 수 없거나 더 정확하게 롤백 할 수없는 DDL 문입니다. AFAIK, 명령문이 실행될 때 진행중인 트랜잭션이 있으면 트랜잭션이 커밋 된 다음 TRUNCATE가 실행되고 실행 취소 할 수 없습니다.

Informix에서 TRUNCATE의 동작은 약간 다릅니다. 트랜잭션에서 TRUNCATE를 사용할 수 있지만 그 이후에 허용되는 명령문은 COMMIT 및 ROLLBACK뿐입니다.

다른 DBMS는 아마도 TRUNCATE TABLE의 동작에 대한 고유 한 해석을 가지고있을 것입니다.

관련 문제