2017-12-13 3 views
1

트랜잭션을 커밋/롤백하는 방법과시기를 배우려고합니다. IF 조건을 사용하여 코드가 오류를 생성하는지 테스트하고 오류가 발생하면 롤백을 수행하려고합니다.트랜잭션을 커밋하거나 롤백하는 방법을 알아야합니다.

커밋 또는 롤백시기를 알 수 있도록 코드를 테스트하는 가장 좋은 방법은 무엇입니까?

필자는 아래의 코드를 시도했지만 메신저이 오류

메시지 102, 수준 15, 상태 1, 줄 5 근처의 구문이 잘못을 받고 '*'.

Begin Transaction DBChallenge1Setup 
Create Table EmployeeRecords(
          EmployeeID varchar(50) PRIMARY KEY 
          PpsNo varchar(8), 
          FirstName varchar(50), 
          LastName varchar(50), 
          Department varchar(50), 
          SupervisorId varchar(50), 
          PhoneNo varchar(50), 
          EmailAddress varchar(50), 
          DateOfBirth date); 
Insert Into EmployeeRecords 
        Values(1, '5686213Q', 'Dan', 'Roche', 'IT',232, '', '[email protected]', '1970-04-10'), 
          (2, '6534223Q', 'Nicholas', 'Martin', 'IT',233, '', '[email protected]', '1974-12-01'), 
          (232, '9514223W', 'Jane', 'Donnelly', 'IT',999, '', '[email protected]', '1960-02-12'), 
          (233, '4212223S', 'Amy', 'Smythe', 'IT',999, '', '[email protected]', '1967-09-11'); 

Select * From EmployeeRecords 
Select @@Rowcount As RecordsEntered, @@ERROR As Errors 
if @@Error > 0 ROLLBACK Transaction DBChallenge1Setup 
if @@Error = 0 Commit Transaction DBChallenge1Setup; 
+0

어떤 RDBMS를 사용하고 있습니까? 또한,'*'는 당신에게 에러를주고있다. 그것을 제거하십시오. create 문에서 컬럼 사이에','가 없다. –

+0

'Try Catch' 블록 사용 방법은 어떻습니까? –

+0

임 SSMS를 사용하고 있습니다. 필자는 쉼표를 추가했습니다. 모든 열을 반환하려면 *가 필요합니다. 나는 Catch를 시도하는 것에 익숙하지 않다. 그러나 그것을 찾을 것이다. 먼저 Commit/Rollback을 올바르게 사용하려고합니다. – frustrationmultiplied

답변

0

나는 예기치 않은 오류를 처리 할 수 ​​try/catch를 사용하는 것이 좋습니다;

begin try 
Begin Transaction DBChallenge1Setup 
Create Table EmployeeRecords(
          EmployeeID varchar(50,) PRIMARY KEY 
          PpsNo varchar(8), 
          FirstName varchar(50), 
          LastName varchar(50), 
          Department varchar(50), 
          SupervisorId varchar(50), 
          PhoneNo varchar(50), 
          EmailAddress varchar(50), 
          DateOfBirth date) 
Insert Into EmployeeRecords 
        Values(1, '5686213Q', 'Dan', 'Roche', 'IT',232, '', '[email protected]', '1970-04-10'), 
          (2, '6534223Q', 'Nicholas', 'Martin', 'IT',233, '', '[email protected]', '1974-12-01'), 
          (232, '9514223W', 'Jane', 'Donnelly', 'IT',999, '', '[email protected]', '1960-02-12'), 
          (233, '4212223S', 'Amy', 'Smythe', 'IT',999, '', '[email protected]', '1967-09-11'); 
Commit Transaction DBChallenge1Setup; 
end try 
begin catch 
    ROLLBACK Transaction DBChallenge1Setup 
end catch 

catch 블록 내에서 트랜잭션을 롤백해야합니다. 또한 catch 블록 내에 발생한 오류 세부 정보를 ERROR_MESSAGE()ERROR_SEVERITY() 등으로 기록하는 것이 더 좋습니다.

+0

커밋을 사용하기 전에 트란이 어떻게 성공했는지 어떻게 알 수 있습니까? – frustrationmultiplied

+0

'TRY'는'commit'을 할 것인지'Catch'를 할 것인지를 제어합니다. 'TRY'는 시도해 봅니다. 작동하지 않는다면'Catch'에 가십시오. –

+0

요점은 try가 작동하지만 올바르게 작동하지 않을 수 있음을 의미합니다. 커밋하기 전에 입력 한 데이터가 올바른지 어떻게 알 수 있습니까? – frustrationmultiplied

관련 문제