트리거를 통해 관련 테이블의 잠금에 문제가 있습니다.SQL Server 트리거 삽입은 커밋 될 때까지 잠금을 발생시킵니다.
테이블 에 레코드를 삽입하기위한 트리거가 있습니다. 테이블 tCatalog
에 삽입하고 있습니다. tCatalog
에 대한 삽입은 종종 몇 초가 걸리는 많은 다른 기능이있는 트랜잭션 내부에 있습니다. 그러나 tSearchQueue
테이블은 트랜잭션을 커밋 할 수있을 때까지 잠겨 있습니다. 이것을 피할 수있는 방법이 있습니까?
INSERT INTO [dbo].[tSearchQueue] (Processed, SQL, sys_CreateDate)
SELECT
0, 'Test ' + cast(CatalogID as varchar(10)), getdate()
FROM
inserted
BEGIN TRAN t1
DECLARE @catalogid int
INSERT INTO tCatalog (ProgramID, sys_CreatedBy, ItemNumber, Description, UOMID)
VALUES (233, 1263, 'brian catalog4', 'brian catalog4', 416)
SELECT @catalogid = SCOPE_IDENTITY()
INSERT INTO tCustomAttributeCatalog (CatalogID, CustomAttributeID, DefaultValue, DefaultValueRead, sys_CreatedBy)
VALUES (@catalogid, 299, 'No', 'No', 1263)
INSERT INTO tCustomAttributeCatalog (CatalogID, CustomAttributeID, DefaultValue, DefaultValueRead, sys_CreatedBy)
VALUES (@catalogid, 300, null, null, 1263)
COMMIT TRAN t1
*** 왜 ***은'tSearchQueue'가 잠겨 있습니까 ?? 이 동작의 원인은 무엇입니까 ?? 이 문제를 피할 수 있습니까? –
@marc_s 그건 본질적으로 내가 묻고있는 질문이다. tCatalog에 대한 트랜잭션이 아직 커밋되지 않았기 때문에 잠긴 것처럼 보입니다. 나는 그것을 피하려고 노력하고있다. – btorkelson
삽입을 'TCatalog'에 표시 할 수 있습니까? 그 자체만으로도 다른 테이블'TSearchQueue'을 잠그지 않아야합니다 .... –