admin

SQL插入/更新/删除触发器效率

sql

在数据库级别的应用程序中,我在架构Billing和Billing_History中有一个名为“分期付款”的表。

显示的触发器位于“计费模式”中的“分期付款”表上。

这样做是每次在记帐模式中插入/更新记录时,也会将其写入历史记录文件中。

如果从记帐表中删除了该记录,则会使用“已删除”指示符= true将其写入历史记录表。

我认为随着更多记录的添加,“如果不存在(从插入中选择*)会杀死我的演奏。

有没有更有效的方法来编写此触发器?

Create TRIGGER [Billing].[Installments_InsertDeleteUpdate_History]
ON [Billing].[Installments]
AFTER INSERT, DELETE, UPDATE
AS BEGIN
Insert Into Billing_History.Installments
    Select *, GetDate(), 0 From Inserted

If Not Exists (Select * From Inserted)
    Insert Into Billing_History.Installments
        Select *, GetDate(), 1 From Deleted

SET NOCOUNT ON;

-- Insert statements for trigger here

结尾


阅读 162

收藏
2021-07-01

共1个答案

admin

考虑到它是必需的任务,我建议您使用触发形式是效果最好的。实现相同的审计结果确实没有更好的方法。

这里的答案将是一致的,即在SQL
Server中创建审核触发器
,这是有关审核解决方案性能的漫长讨论

您的情况略有不同,因为您实际上不希望在UPDATE情况下使用已删除的(原始)表,因此不希望使用IF。

2021-07-01