SQL Server触发器删除到单个表

时间:2017-01-11 11:44:13

标签: sql-server triggers audit

我想在我的数据库中的每个表上创建一个触发器,该触发器会将已删除数据的副本记录到单个“审计”中。我可以参考的表格。

我看了一下,但由于列定义不同,似乎无法找到将其全部插入到单个表中的方法。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

这是一个示例代码。我在这里做的是非常更新用户在表上执行的操作我从删除和插入表中获取新旧值,当我们更新表时,sql会保留这些值。对于你删除的情况我认为你可以从删除中获取它。

$valueToInsert = 'Custom url, or another value';
$installer = $this;
$installer->startSetup();

$installer->getConnection()
    ->update($this->getTable('core_config_data'),
        array('value' => $valueToInsert),
        $installer->getConnection()->quoteInto('path=?', 'web/secure/base_url')
    );

$installer->endSetup();

答案 1 :(得分:1)

创建审核表:

CREATE TABLE [dbo].[MyAudit](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [TableName] [nvarchar](100) NOT NULL,
    [ColumnName] [nvarchar](100) NOT NULL,
    [DeletedValue] [sql_variant] NULL,
    [ChangeDateTime] [datetime] NOT NULL,
)
GO
ALTER TABLE [dbo].[MyAudit] ADD  CONSTRAINT [DF_MyAudit_ChangeDateTime]  DEFAULT (getdate()) FOR [ChangeDateTime]

将触发器添加到要在其中记录删除的每个表:

CREATE TRIGGER [MyTrigger] 
   ON  [MyTable]
   AFTER DELETE
AS 
BEGIN
    SET NOCOUNT ON;
    Insert into [MyAudit] ([Tablename], [ColumnName], [DeletedValue])
        Select 'MyTable', 'Column1', deleted.Column1 from deleted
    Insert into [MyAudit] ([Tablename], [ColumnName], [DeletedValue])
        Select 'MyTable', 'Column2', deleted.Column2 from deleted
--Do all columns until column x
    Insert into [MyAudit] ([Tablename], [ColumnName], [DeletedValue])
        Select 'MyTable', 'ColumnX', deleted.ColumnX from deleted
END