当我在触发器内执行存储过程时发生锁定

时间:2014-10-15 08:53:32

标签: sql sql-server sql-server-2008 table-lock

我有一个执行两个程序的触发器。

ALTER TRIGGER [dbo].[TRG_SP_SYNCH_CAB]
   ON [VTBO_INTERFACE].[dbo].[T_TRIGGER_TABLE_FOR_SYNCH]
   INSTEAD OF INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here
    INSERT INTO T_TRIGGER_TABLE_FOR_SYNCH (DT) 
    VALUES (GETDATE());

    exec PUMPOMAT_HO.DBO.SP_CM_TransferCAB
    exec PUMPOMAT_HO.DBO.SP_CM_UpdateCAB

END

两个程序的执行时间为5分钟。当我尝试向T_TRIGGER_TABLE_FOR_SYNCH表插入一个值时,我在存储过程中使用的其他表将被锁定5分钟。但是当我尝试直接执行两个程序时,如

exec SP_CM_TransferCAB
exec SP_CM_UpdateCAB

没有锁定发生。我应该在触发器中写什么以避免表锁。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试通过调用第一个过程内部(结束)的第二个过程,因为我看不到给出参数。

此表[VTBO_INTERFACE].[dbo].[T_TRIGGER_TABLE_FOR_SYNCH]是否在任何程序中使用?

您应该尝试change the design/data flow to mimic this procedure call