2017-12-16 14 views
-3

행 ID를 사용하여 동일한 행에서 select 쿼리를 수행하는 웹 서비스로 전송하는 SQL Server after insert 트리거가 있지만 작업이 모든 작업에 교착 상태 인 것처럼 보입니다.삽입 후 SQL Server가 행을 잠급니까?

+3

트리거는 매우 작고 민첩해야합니다 ** - 광범위한 계산이나 외부 웹 서비스에 대한 호출 등과 같이 장기간 실행되는 작업을 수행하는 것은 일반적으로 ** 좋은 생각이 아닙니다 ** 당신은 이 장기 실행 작업을 @marc_s와 동의 한 트리거 –

+0

에서 분리하십시오. 아주 간단하고 가볍게 유지하십시오. 트리거에서 웹 서비스를 실제로 호출해야하는 경우 SQL Server에서 서비스 브로커 및 비동기 대기열을 확인해야합니다. – Namphibian

답변

6

예. INSTER INSERT 트리거는 INSERT 문과 동일한 트랜잭션에서 실행되므로 작업의 영향을받는 행은 잠길 수 있습니다. 트리거는 다른 테이블이나 큐에 행을 삽입해야하며 INSERT가 커밋 된 후에 백그라운드 프로세스에서 웹 서비스를 호출해야합니다.

+3

분명히 알 수 있습니다 : ** 트리거 자체 **는 삽입 된 행에 액세스 할 수 있습니다. 이는 INSERT 연산과 동일한 트랜잭션에서 실행되기 때문입니다. 그러나 "외부"프로세스는'READ UNCOMMITTED' 트랜잭션 격리 수준을 사용하지 않는 한 (잠겨 있기 때문에) 해당 행을 읽을 수 없습니다. –