ストアド プロシージャを呼び出してテーブルを更新/挿入すると、C# コードでデッド ロック例外が発生しConfiguration
ます。
ストアド プロシージャはSP_Update_Configuration
、新しいレコードを挿入するか、既存のレコードを更新します。
トリガーは、履歴テーブルに以前のレコードの履歴を保持するように設定されています。Configuration
テーブルに更新または挿入がある場合は、そのレコードをConfiguration_History
テーブルに追加する必要があります。
トリガーがデッドロックを引き起こしていると思いますか? トリガーを追加する前は何の問題もありませんでした.... 何かアイデアはありますか?
SQL Server 2012 Express を使用しています。
これが私のSQLの例です:
CREATE PROCEDURE SP_Update_Configuration
(
--Input variables
)
AS
BEGIN TRANSACTION
DECLARE @RetCode INT
DECLARE @RowCnt INT
--Standard Update Logic
SELECT @RowCnt = @@ROWCOUNT
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
SET @RetCode = 5
RETURN @RetCode
END
IF @RowCnt = 0
BEGIN
--Standard Insert Logic
END
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
SET @RetCode = 5
RETURN @RetCode
END
COMMIT TRANSACTION
GO
create trigger dbo.Configuration_Log_Insert
on dbo.Configuration
for insert
as
set nocount on
insert into Configuration_History
select *
from Configuration
go
exec sp_settriggerorder @triggername = 'Configuration_Log_Insert', @order = 'last', @stmttype = 'insert'
create trigger dbo.Configuration_Log_Update
on dbo.Configuration
for update
as
set nocount on
insert into Configuration_History
select *
from Configuration
go
exec sp_settriggerorder @triggername = 'Configuration_Log_Update', @order = 'last', @stmttype = 'update'