今天接到一个需求,要在某个业务表上增加一个记录创建时间的字段,用于事后分析。这实际上是审计信息记录的需求,不应该也没有必要修改业务数据库。采用触发器在插入记录时,同时写入审计信息更可靠也更容易维护。比如,需要记录表WorkFlow_Entity中每条记录的创建时间,可以新增表WorkFlow_EntityCreateTime:
创建脚本如下:
CREATE TABLE [dbo].[WorkFlow_EntityCreateTime](
[WE_Id] [int] NOT NULL,
[CreateDate] [datetime] NULL,
CONSTRAINT [PK_dbo.WorkFlow_EntityCreateTime] PRIMARY KEY CLUSTERED
(
[WE_Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
然后在WorkFlow_Entity表上创建插入触发器,在新记录插入时,将新记录的id和插入时间写入审计表:
CREATE TRIGGER [dbo].[WorkFlow_Entity_Insert_Trigger]
ON [dbo].[WorkFlow_Entity]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO WorkFlow_EntityCreateTime(
WE_Id,
CreateDate
)
SELECT
i.WE_Id,
GETDATE()
FROM
inserted i
END
这样,新插入记录后,审计信息会记录到审计表中。