2011-11-28 2 views
2

트랜잭션이 실행 된 후에 트랜잭션을 롤백하는 방법을 찾으려고합니다. 예를 들어코드가 실행 된 후 T-SQL에서 트랜잭션 롤백

:

DECLARE @tsubaki VARCHAR(25); 
SET @tsubaki = 'A Transaction'; 

BEGIN TRANSACTION @tsubaki 
UPDATE dbo.Maka SET id = 400, name = 'inu' --notice I didn't put there where clause 
COMMIT TRANSACTION 

나중에 내가 내가 원래 의도 단지 하나 개의 레코드 대신, 데이타베이스 마카에 모든 업데이트 실현에.

는 지금은 업데이트 전에 롤백하는 코드를 작성하려고 :

DECLARE @tsubaki VARCHAR(25); 
SET @tsubaki = 'A Transaction'; 
ROLLBACK TRANSACTION @tsubaki; 

이 작동하지 않습니다. 최종선 : 트랜잭션이 커밋되고 SQL이 실행 된 후 MS-SQL Server 2008에서 SQL 트랜잭션을 롤백하는 방법을 찾고 있습니다.

미리 감사드립니다.

답변

6

T-SQL 코드에서이를 수행 할 수 없습니다. 로그 파일에서 restore to a point in time해야합니다. 복원은 트랜잭션을 포함하여 모든 시점을 "실행 취소"합니다.

나중에 수동 업데이트 (크거나 작음)를 수행하기 전에 db를 항상 백업해야합니다. 당신은 또한 약간의 속임수로 자신을 숨길 수 있습니다. 다음과 같은 코드를 삭제/당신의 갱신을 쓰기 :

SELECT * FROM dbo.Maka 
-- UPDATE dbo.Maka SET id = 400, name = 'inu' 
WHERE some_identifier = some_value 

실행을 무해 먼저 SELECT 버전을하고 레코드 (들)을 업데이트 할를 확인할 수 있습니다 때의 코드를 선택하는 곳 UPDATE에 절 위로 그것을 실행하십시오.

+0

감사합니다. 그것은 정말 현명한 아이디어입니다. 나는 다음 번에 업데이트 성명을 쓸 때해야 할 것입니다. – Algorhythm

+1

나는 가능한 한 항상 개발 데이터에 대한 쿼리를 시도한다. – Dave

+0

@Algorhythm - 또는 UPDATE 문에서 행 수가 합리적으로 확인 될 때까지'COMMIT'을 실행하지 마십시오. –