다음을 통해 공유


트랜잭션 수명

적용 대상: SQL Server

Transact-SQL 저장 프로시저에서 시작된 트랜잭션과 관리 코드에서 시작된 트랜잭션 간에는 중요한 차이점이 있습니다. CLR(공용 언어 런타임) 코드는 CLR 호출의 진입 또는 종료 시 트랜잭션 상태의 균형을 해제할 수 없습니다. 이 차이점으로 인해 발생하는 다음과 같은 문제점에 주의하십시오.

  • CLR 프레임 내에서 시작된 트랜잭션은 커밋하거나 롤백해야 합니다. 그렇지 않으면 프레임이 종료될 때 SQL Server에서 오류를 생성합니다.

  • 외부 트랜잭션은 CLR 코드 내에서 커밋하거나 롤백할 수 없습니다.

  • 동일한 프로시저에서 시작되지 않은 트랜잭션을 커밋하려고 하면 런타임 오류가 발생합니다.

  • 동일한 절차에서 시작되지 않은 트랜잭션을 롤백하려고 하면 트랜잭션의 응답이 중지됩니다(다른 부작용 작업이 발생하지 않도록 방지). CLR 코드가 범위를 벗어날 때까지 트랜잭션이 중단됩니다. 프로시저 내에 오류가 있어 전체 트랜잭션을 종료하려는 경우에는 이 동작이 유용할 수 있습니다.

참고 항목

CLR 통합 및 트랜잭션