使用insert上的触发器更新相同的表

时间:2013-07-18 18:43:54

标签: sql-server tsql triggers

我们的一个表有一个用于保存故障排除信息的列,它是一个XML数据类型,与行有关,因此如果出现问题,我们可以快速查看该事务发生的所有事情。这已经成为一个问题,因为它大大增加了数据库的大小。一个月后,通常无需检索此信息,这会浪费宝贵的空间。

我们的解决方案是通过使用插入触发器将XML日志列在一个月之后归零。我们担心的是,这是否会影响表的性能,足以引起注意并可能导致问题?

以下是我们要努力实现的目标:

CREATE PROCEDURE [dbo].[sp_ClearTransactionXmlLogs]
AS
    UPDATE [dbo].[CCResponse]
       SET [TransactionXML] = NULL
     WHERE [DateSaved] < DATEADD(MONTH,-1,GETDATE())
       AND [TransactionXML] IS NOT NULL; 

CREATE TRIGGER [dbo].[tr_ClearTransactionXmlLogs]
ON [dbo].[CCResponse]
AFTER INSERT
AS EXEC sp_ClearTransactionXmlLogs;

2 个答案:

答案 0 :(得分:0)

为什么不将它作为夜间工作安排在数据库维护工作中,而不是每次插入时都将其作为触发器运行?

答案 1 :(得分:0)

通常触发器用于在关于记录更改的主要操作(插入,更新,删除)之后执行操作。

如果您没有执行任何插入,那么您使用TransactionXML的CCResponse remail不会为空。

而不是触发器,恕我直言,我使用计划的工作。