2014-04-13 2 views
0

트랜잭션을 사용하여 테이블에서 몇 줄을 삭제하려고합니다. 세 번 명령 삭제를 사용합니다. 두 개는 OK이고 세 번째는 실수입니다. 저장 지점을 만들고 2 개의 개체를 삭제하려고합니다. 하지만 오류가 발생했습니다 : 현재 트랜잭션을 커밋 할 수 없으며 저장 점으로 롤백 할 수 없습니다. 전체 트랜잭션을 롤백하십시오. 여기 내 코드 :SQL. 트랜잭션을 롤백 할 수 없습니다.

BEGIN TRANSACTION 
BEGIN TRY 
DELETE FROM employee 
WHERE ID = 101; --OK 

DELETE FROM employee 
WHERE Name = 'James'; --OK 

SAVE TRANSACTION point_1; 

DELETE FROM employee 
WHERE ID = '11a'; --letters are not allowed 
COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION point_1 
    PRINT 'Error! Not all employees were deleted from database.' 
END CATCH 

아무도 도와 줄 수 있습니까? 고마워요!

BEGIN TRANSACTION 
DELETE FROM employee 
WHERE ID = 101; 

DELETE FROM employee 
WHERE Name = 'James'; 

SAVE TRANSACTION point_1; 

BEGIN TRY 
DELETE FROM employee 
WHERE ID = '11a'; 
END TRY 
BEGIN CATCH 
    if XACT_STATE() = -1 
     ROLLBACK TRANSACTION 
    if XACT_STATE() = 1 and @@TRANCOUNT = 0 
     ROLLBACK TRANSACTION 
    if XACT_STATE() = 1 and @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION point_1 
PRINT 'Error! Not all employees were deleted from database.' 
END CATCH 

이 시간에는 에러 메시지가 없지만, 처음 두 개체가 삭제되지 않습니다

나는이 방법을 시도했다. 내 실수는 어디 갔지? 고맙습니다!

+0

[SQL 트랜잭션 오류 : 현재 트랜잭션을 커밋 할 수 없으며 로그 파일에 쓰는 작업을 지원할 수 없습니다.] (http://stackoverflow.com/questions/7488149/sql-transaction-error-the-current -transaction-can-be-commit-and-can not-su) –

+0

내 쿼리가 커밋 할 수없는 상태가됩니다. 내 세이브 포인트로 어떻게 돌아갈 수 있습니까? – user3443227

답변

0

세션에는 아마도 SET XACT_ABORT ON이있을 것입니다. 코드가 트리거 안에 있으면이 설정은 기본적으로 ON입니다.

코드를 SET XACT_ABORT OFF으로 시도해보십시오.

+0

나는 그것을 끄려고했지만 도움이되지 않는다. – user3443227

관련 문제