当我调用存储过程更新/插入Configuration
表时,我的C#代码中出现死锁异常。
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'
答案 0 :(得分:1)
SELECT @RowCnt = @@ROWCOUNT
IF @@ERROR <> 0
这里有麻烦,因为@@ERROR
是错误代码
SELECT @RowCnt = @@ROWCOUNT
您可以这样做:
SELECT @RowCnt = @@ROWCOUNT, @error = @@ERROR
IF @error <> 0
在触发器中你有
insert into Configuration_History
select *
from Configuration
但必须是
insert into Configuration_History
select *
from inserted