如何创建审核历史表表

时间:2017-11-02 16:18:42

标签: sql sql-server

我有一个更新记录的存储过程。任何人都可以帮我如何创建一个审计表,以便在更新时存储以前的数据和更新的数据?

我有一个更新表的存储过程,但我希望在运行存储过程后将先前记录和更新记录的审核历史记录保存在单独的表中。我只想在单独的表中捕获存储过程所做的更改

1 个答案:

答案 0 :(得分:2)

您需要在该特定表格上编写触发器功能。

检查以下示例,

CREATE TABLE Customer (Id int, customer_name varchar(50));

INSERT INTO Customer VALUES(1, 'Jhon');
INSERT INTO Customer VALUES(2, 'Smith');

-- Create audit table 
CREATE TABLE [dbo].[AuditTable](
    [Id] [int] NOT NULL,
    [OldValue] [varchar](50) NULL,
    [NewValue] [varchar](50) NULL
) ON [PRIMARY]

假设您有一个客户表,并希望每当对customer表进行更改时插入审计记录。然后写一个触发器,如下,

CREATE TRIGGER Customer_Audit on Customer
AFTER UPDATE
AS

INSERT INTO AuditTable(Id, OldValue, NewValue) 

select d.Id, d.customer_name, c.customer_name
from deleted d 
inner join Customer c
on d.Id = c.Id 

GO

现在每当对customer表进行更改时,审计记录将插入审计表,如下所示

UPDATE Customer SET customer_name = 'Shamique' WHERE id = 2

Output after update the record

希望很清楚。 Cheerz!

被修改

使用updatedDate和updatedTime列更改表,然后按如下所示更改触发器查询,

INSERT INTO AuditTable(Id, OldValue, NewValue, updateDate, updateTime) 
select d.Id, d.customer_name, c.customer_name, 
CONVERT(VARCHAR(10),getdate(),101) as DatePart, 
CONVERT(VARCHAR(10),getdate(),108) as TimePart from deleted d inner join 
Customer c on d.Id = c.Id

如果您需要将日期和时间添加为一个,那么您只需在select语句中使用 getDate()语法即可。