在数据库级别的应用程序中,我在架构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
结尾
考虑到它是必需的任务,我建议您使用触发形式是效果最好的。实现相同的审计结果确实没有更好的方法。
这里的答案将是一致的,即在SQL Server中创建审核触发器,这是有关审核解决方案性能的漫长讨论。
您的情况略有不同,因为您实际上不希望在UPDATE情况下使用已删除的(原始)表,因此不希望使用IF。