トリガーを使用して関連するテーブルのロックに問題があります。SQL Serverのトリガー挿入により、コミットまでロックが発生します。
テーブル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への挿入トランザクションがまだコミットされていないため、ロックされているように見えます。私はそれを避けようとしています。 – btorkelson
挿入物を 'TCatalog'に表示できますか?しかし、それだけでは別のテーブル 'TSearchQueue'をロックしてはいけません.... –