트랜잭션 수명
적용 대상: SQL Server
Transact-SQL 저장 프로시저에서 시작된 트랜잭션과 관리 코드에서 시작된 트랜잭션 간에는 중요한 차이점이 있습니다. CLR(공용 언어 런타임) 코드는 CLR 호출의 진입 또는 종료 시 트랜잭션 상태의 균형을 해제할 수 없습니다. 이 차이점으로 인해 발생하는 다음과 같은 문제점에 주의하십시오.
CLR 프레임 내에서 시작된 트랜잭션은 커밋하거나 롤백해야 합니다. 그렇지 않으면 프레임이 종료될 때 SQL Server에서 오류를 생성합니다.
외부 트랜잭션은 CLR 코드 내에서 커밋하거나 롤백할 수 없습니다.
동일한 프로시저에서 시작되지 않은 트랜잭션을 커밋하려고 하면 런타임 오류가 발생합니다.
동일한 절차에서 시작되지 않은 트랜잭션을 롤백하려고 하면 트랜잭션의 응답이 중지됩니다(다른 부작용 작업이 발생하지 않도록 방지). CLR 코드가 범위를 벗어날 때까지 트랜잭션이 중단됩니다. 프로시저 내에 오류가 있어 전체 트랜잭션을 종료하려는 경우에는 이 동작이 유용할 수 있습니다.