문제

SQL Server 2005에서 업데이트 쿼리를 롤백하려면 어떻게해야합니까?

코드를 통해서가 아니라 SQL 로이 작업을 수행해야합니다.

도움이 되었습니까?

해결책

begin transaction

// execute SQL code here

rollback transaction

이미 쿼리를 실행하고 다시 롤백하려면 불행히도 유일한 옵션은 데이터베이스 백업을 복원하는 것입니다. 전체 백업을 사용하는 경우 데이터베이스를 특정 시점으로 복원 할 수 있어야합니다.

다른 팁

이 도구가 필요하며 트랜잭션을 찾아서 리버스 할 수 있습니다.

ApexSQL 로그

당신이 사용할 수있는 암시 적 거래 이것을 위해

SET IMPLICIT_TRANSACTIONS ON

update Staff set staff_Name='jas' where staff_id=7

ROLLBACK

요청 대로이 설정을 설정할 수 있습니다 ( SET IMPLICIT_TRANSACTIONS ON) 저장 프로 시저에서 저장 프로 시저를 시작 절차로 설정하여.

하지만 SET IMPLICIT TRANSACTION ON 명령은 연결 특정입니다. 따라서 Start Up 저장 프로 시저를 실행하는 것 이외의 연결은 설정 한 설정의 이점이 없습니다.

거래 내에서 실행 된 진술을 롤백 할 수 있습니다. 거래를 촉구하는 대신 거래를 롤백하십시오.

당신이 무언가를 업데이트하고 그 업데이트를 롤백하고 싶다면, 당신은 (아직 기념적으로 구성되지 않은) 거래 내부 에서이 작업을 수행하지 않았다면 운이 좋다고 생각합니다 ...

(수성 수리 또는 백업 복원)

업데이트가 커지면 단일 업데이트 만 롤백 할 수 없습니다. 가장 좋은 방법은 데이터베이스의 이전 백업으로 롤백하는 것입니다.

지정한 정보에서 가장 좋은 복구 가능성은 데이터베이스 백업을 통한 것입니다. 나는 당신이 당시 거래를 사용하지 않았기 때문에 당신이 추진 한 변경 사항을 롤백 할 수있을 것이라고 생각하지 않습니다.

할 일 :

헤더 코드 ...

Set objMyConn = New ADODB.Connection

Set objMyCmd = New ADODB.Command Set

objMyRecordset = New ADODB.Recordset

On Error GoTo ERRORHAND 

작업 코드 ...

objMyConn.ConnectionString = ConnStr

objMyConn.Open 

암호....

'Excel에서 데이터 복사'

objMyConn.BeginTrans <-- define transactions to possible be rolled back 

For NewRows = 2 To Rows

objMyRecordset.AddNew 

For NewColumns = 0 To Columns - 1

objMyRecordset.Fields(NewColumns).Value = ActiveSheet.Cells(NewRows, NewColumns + 1)

Next NewColumns objMyRecordset.Update Next NewRows

objMyConn.CommitTrans <- if success, commit them to DB

objMyConn.Close

오류 핸드 :

Success = False 

objMyConn.RollbackTrans <-- here we roll back if error encountered somewhere

LogMessage = "ERROR writing database: " & Err.Description

...

이미 언급했듯이 백업에서 복원을 제외하고는 할 수있는 일이 없습니다. 적어도 지금 당신은 거래에서 항상 무슨 일이 일어나는지보기 위해 거래에서 진술을 래핑하는 법을 배웠을 것입니다. 또한 데이터베이스의 백업이없는 경우 데이터베이스의 정기적 인 백업도 가르쳐줍니다.

이 예에서 우리는 2 라인 삽입을 쿼리로 실행하고 모두 사실이면 실행되지만 실행이 없다면 아무것도 실행하지 않고 롤백합니다.

DECLARE @rowcount int  set @rowcount = 0 ; 
BEGIN TRANSACTION [Tran1]
BEGIN TRY 
 insert into [database].[dbo].[tbl1] (fld1) values('1') ;
    set @rowcount = (@rowcount + @@ROWCOUNT); 
 insert into [database].[dbo].[tbl2] (fld1) values('2') ;
    set @rowcount = (@rowcount + @@ROWCOUNT); 

IF @rowcount =  2
  COMMIT TRANSACTION[Tran1]
ELSE
  ROLLBACK TRANSACTION[Tran1]
END TRY
  BEGIN CATCH
  ROLLBACK TRANSACTION[Tran1]
END CATCH

노력하다

ROLLBACK WORK;

일반적으로 작동합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top