Sql 启用触发器时,表停止更新

Sql 启用触发器时,表停止更新,sql,sql-server,tsql,triggers,Sql,Sql Server,Tsql,Triggers,我有一个传统的应用程序,工作非常好。我试图创建一个触发器,当表中的行被插入到表中时,将它们去掉。问题是,一旦我启用触发器,表就不再更新。应用程序仍在正常运行,但我猜我的触发器禁用表更新的原因是什么?有人能解释一下如何进行故障排除或可能出现什么问题吗 更新:如我所说,一旦启用触发器,表就会停止更新。即,我可以将trgtskrun_id设置为2345678,并且不会加载更多行。在短暂暂停后停止触发器后,行将再次开始插入,但不是在下一个逻辑编号处插入,这意味着应该写入表的行在系统中的某个位置丢失了?当

我有一个传统的应用程序,工作非常好。我试图创建一个触发器,当表中的行被插入到表中时,将它们去掉。问题是,一旦我启用触发器,表就不再更新。应用程序仍在正常运行,但我猜我的触发器禁用表更新的原因是什么?有人能解释一下如何进行故障排除或可能出现什么问题吗

更新:如我所说,一旦启用触发器,表就会停止更新。即,我可以将trgtskrun_id设置为2345678,并且不会加载更多行。在短暂暂停后停止触发器后,行将再次开始插入,但不是在下一个逻辑编号处插入,这意味着应该写入表的行在系统中的某个位置丢失了?当我重新启动它时,使用上面的示例,下一个数字是2345685,因此一些事务最终从编写中删除。很奇怪

为了子孙后代,这是我的触发器-

GO
/****** Object:  Trigger [dbo].[trig_trgtskrunUpdate]    Script Date: 15/02/2014 11:27:49 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[trig_trgtskrunUpdate] ON [dbo].[trgtskrun]
   AFTER INSERT
AS

SET NOCOUNT ON;

DECLARE @HistoryType    char(1) --"I"=insert, "U"=update, "D"=delete

SET @HistoryType=NULL

IF EXISTS (SELECT * FROM INSERTED)
    BEGIN
        --INSERT
        SET @HistoryType='I'
    --handle insert or update data
    INSERT INTO [Admiral_DEV].[dbo].[happycopy]
            (trgtskrun_revtype, trgtskrun_revtm, trgtskrun_id, trgtskrun_payload, trgtskrun_status,
            trgtskrun_crtdt, trgtskrun_rundt, trgtskrun_parent, trgtskrun_transaction, trgtskrun_expire, trgtskrun_data,
            trgmst_id, tskmst_id, jobmst_id, jobrun_id, nodmst_id, nodmst_target, servicemst_id, servicemst_target,
            usrmst_id)
        SELECT
            @HistoryType, GETDATE(), trgtskrun_id, trgtskrun_payload, trgtskrun_status,
            trgtskrun_crtdt, trgtskrun_rundt, trgtskrun_parent, trgtskrun_transaction, trgtskrun_expire, trgtskrun_data,
            trgmst_id, tskmst_id, jobmst_id, jobrun_id, nodmst_id, nodmst_target, servicemst_id, servicemst_target,
            usrmst_id
            FROM trgtskrun where trgtskrun_id = (select MAX(trgtskrun_id) from trgtskrun)
END

对于任何有关设计的问题,如果是从tablename而不是从插入/删除中告诉它,则不允许复制这些表格中的文本列,因此必须从tablename来回答。

除非有人能指出正确的方向,否则这是一个没有答案的问题,但对于来自未来的人来说,这个问题与源数据库或目标数据库的访问权限需要让我的DBA进行调查。我尝试在我拥有完全权限的数据库上使用相同的应用程序执行相同的任务,并且触发器工作,因此我对源数据库或目标数据库的许可导致了中断

更新-进一步测试和验证


触发器和存储过程显然是作为拥有数据库的帐户运行的,因此,只要我在目标数据库中创建了与源数据库中存在的sql access用户相似的用户,触发器就会按设计工作。

您可以使用此命令禁用

ALTER TRIGGER TRIGGER_NAME DISABLE;
您可以使用此命令启用

ALTER TRIGGER TRIGGER_NAME ENABLE;

dbo.trgtskrun与[Admiral_DEV].[dbo].[trgtskrun]是同一个表吗?不同的表,不同的数据库。它正在创建表的副本,但添加了一些额外的列以添加一些标识。我怀疑您有递归/嵌套查询。当表上唯一的区别是执行create触发器代码的数据库时,这看起来非常容易。如果您的表名与原始表不同,则此结构会更安全。啊,好的,我会尝试一下。没有骰子。我已经将目标位置表更改为happycopy,触发器中的所有内容都会修改,精细更新并启用ok,但是源表会停止更新,直到再次禁用触发器。