Sql server 插入一定数量的记录后,如何停止/更改sql触发器?

Sql server 插入一定数量的记录后,如何停止/更改sql触发器?,sql-server,tsql,logging,database-trigger,Sql Server,Tsql,Logging,Database Trigger,我目前在我的大多数表上运行了很多触发器。我正在对所有这些应用程序使用Insert、Update和Delete触发器。它们登录到一个单独的选项卡中。但是,使用该软件的处理时间因此而增加。对于较小的变化,这几乎不明显,但是对于较大的变化,它可以从10-15分钟变为1小时 我想更改我的触发器,在1分钟批量操作中插入250条日志记录后停止插入新的日志记录,删除新创建的日志,并创建一条记录提及批量和使用的查询。问题是我似乎无法让触发器在激活时停止 我已经为此创造了必要的条件: CREATE TRIGGER

我目前在我的大多数表上运行了很多触发器。我正在对所有这些应用程序使用Insert、Update和Delete触发器。它们登录到一个单独的选项卡中。但是,使用该软件的处理时间因此而增加。对于较小的变化,这几乎不明显,但是对于较大的变化,它可以从10-15分钟变为1小时

我想更改我的触发器,在1分钟批量操作中插入250条日志记录后停止插入新的日志记录,删除新创建的日志,并创建一条记录提及批量和使用的查询。问题是我似乎无法让触发器在激活时停止

我已经为此创造了必要的条件:

CREATE TRIGGER AUDIT_LOGGING_INSERT_ACTUALISERINGSCOEFFICIENT ON ACTUALISERINGSCOEFFICIENT FOR INSERT AS  
BEGIN
    SET NOCOUNT ON

DECLARE @Group_ID INT = (SELECT COALESCE(MAX(Audit_Trail_Group_ID), 0) FROM NST.dbo.Audit_Trail) + 1
DECLARE @BulkCount INT = (SELECT COUNT(*) FROM NST.dbo.Audit_Trail WHERE Audit_Trail_User = CONCAT('7090-LOCAL-', UPPER(SUSER_SNAME())) AND GETDATE() >= DATEADD(MINUTE, -1, GETDATE())) 

IF @BulkCount < 250
    BEGIN
        INSERT ...
    END
ELSE
    BEGIN
        DECLARE @BulkRecordCount INT = (SELECT COUNT(*) FROM NST.dbo.Audit_Trail WHERE Audit_Trail_User = CONCAT('7090-LOCAL-', UPPER(SUSER_SNAME())) AND GETDATE() >= DATEADD(MINUTE, -60, GETDATE()) AND Audit_Trail_Action LIKE '%BULK%')
        IF @BulkRecordCount = 0
            BEGIN
                INSERT ...
            END
    END
END
但是,当我执行一个更改10000多条记录的查询时,触发器仍然会插入所有10000条记录。当我在插入10000条大容量记录之后再次执行它时。可能是因为它在第一次执行时触发函数10000次

正如您所看到的,只有在最后60分钟内使用了1次批量操作时,这才有效


任何处理批量更改的想法都是受欢迎的。

我假设它将是一个结构化的禁用所有触发器,然后是批量操作,然后再次启用。虽然设置本身听起来很恐怖,但我也想到了这一点。但它也必须在存在此类操作的软件中的任何地方实现。我希望能找到一个通用的解决方案。我假设它是一个结构化的禁用所有触发器,然后是批量操作,然后再次启用。虽然设置本身听起来很恐怖,但我也想到了这一点。但它也必须在存在此类操作的软件中的任何地方实现。我希望找到一个普遍的解决办法。