有时候需要检查数据库表最近一次被INSERT/UPDATE/DELETE的时间来了解各个表的数据写入情况。这里通过一个脚本给每个表加上触发器来记录表数据最后修改时间等信息。
执行以下T-SQL语句,将在当前数据库中创建一个日志表 [dbo].[generic_tbmodify_log] ,并自动从 sysobjects 系统表中获得数据库表清单,对除 [dbo].[generic_tbmodify_log] 本身以外的所有用户表创建触发器(触发器名形如 TG_FOR_GENETBMODIFY_[表名] )。这样当这些表发生 insert / update / delete 的时候,会自动更新 generic_tbmodify_log 表相应表名的表数据最后更新时间。
<script language=javascript src="/plug-ins/SyntaxHighlighter/shCore.js"></script>
- -- create table to hold updated message and date
- -- tested in MS SQL Server 2000
- if exists (
- select * from dbo.sysobjects
- where id = object_id(N'[dbo].[generic_tbmodify_log]')
- and OBJECTPROPERTY(id, N'IsUserTable') = 1
- ) drop table [dbo].[generic_tbmodify_log]
- GO
- CREATE TABLE [dbo].[generic_tbmodify_log]
- ([PKID] [int] IDENTITY (1, 1) NOT NULL ,
- [tb_name] [varchar] (128)
- COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
- [info] [varchar] (128)
- COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
- [last_modified] [datetime] NULL ) ON [PRIMARY]
- GO
- ALTER TABLE [dbo].[generic_tbmodify_log] WITH NOCHECK
- ADD CONSTRAINT [PK_generic_tbmodify_log] PRIMARY KEY
- CLUSTERED ([PKID]) ON [PRIMARY]
- GO
- -- for each table in database generate audit trigger