【发布时间】:2023-03-29 11:11:01
【问题描述】:
在通过触发器锁定相关表时遇到问题。
我正在插入表tCatalog(这有一个触发器可以简单地在另一个表tSearchQueue 中插入一条记录)。对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 的事务尚未提交。我试图避免这种情况。
-
你能告诉我们插入
TCatalog吗?但是,仅此一项不应该锁定另一个表TSearchQueue.... -
@marc_s 编辑问题以包含插入语句
-
谢谢 - 但再次:没有迹象表明对
TSearchQueue表进行了任何操作.....不知道该表发生了什么,无法提供帮助,真的……
标签: sql sql-server triggers transactions deadlock