Sql 审计跟踪触发器生成
正在开发审计跟踪系统,并决定使用带触发器的阴影/历史记录表 遵循这一点并尝试使用 我不明白它是如何创建历史记录表和触发器的 任何人都能理解它的工作原理并帮助我 我试着用谷歌来理解它。但没有明确的例子 下面的内容对我来说并不清楚 审计表如下所示Sql 审计跟踪触发器生成,sql,sql-server,database,sql-server-2008,audit-trail,Sql,Sql Server,Database,Sql Server 2008,Audit Trail,正在开发审计跟踪系统,并决定使用带触发器的阴影/历史记录表 遵循这一点并尝试使用 我不明白它是如何创建历史记录表和触发器的 任何人都能理解它的工作原理并帮助我 我试着用谷歌来理解它。但没有明确的例子 下面的内容对我来说并不清楚 审计表如下所示 CREATE TABLE [dbo].[<%= AuditTableName %>] ( [ChangeLogID] [int] IDENTITY (1, 1) , [OperationType] [varchar] (10
CREATE TABLE [dbo].[<%= AuditTableName %>] (
[ChangeLogID] [int] IDENTITY (1, 1) ,
[OperationType] [varchar] (10) NOT NULL ,
[ChangeTimestamp] [datetime] NOT NULL ,
[MadeBy] [varchar] (6) NOT NULL ,
[TableChanged] [varchar] (50) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[<%= AuditFieldTableName %>] (
[FieldName] [varchar] (50) NOT NULL ,
[ChangeLogID] [int] NOT NULL ,
[BeforeValue] [sql_variant] NOT NULL ,
[AfterValue] [sql_variant] NOT NULL
) ON [PRIMARY]
创建表[dbo].[](
[ChangeLogID][int]标识(1,1),
[OperationType][varchar](10)不为空,
[ChangeTimestamp][datetime]不为空,
[MadeBy][varchar](6)不为空,
[TableChanged][varchar](50)不为空
)在[小学]
细节表如下所示
CREATE TABLE [dbo].[<%= AuditTableName %>] (
[ChangeLogID] [int] IDENTITY (1, 1) ,
[OperationType] [varchar] (10) NOT NULL ,
[ChangeTimestamp] [datetime] NOT NULL ,
[MadeBy] [varchar] (6) NOT NULL ,
[TableChanged] [varchar] (50) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[<%= AuditFieldTableName %>] (
[FieldName] [varchar] (50) NOT NULL ,
[ChangeLogID] [int] NOT NULL ,
[BeforeValue] [sql_variant] NOT NULL ,
[AfterValue] [sql_variant] NOT NULL
) ON [PRIMARY]
创建表[dbo].[](
[FieldName][varchar](50)不为空,
[ChangeLogID][int]不为空,
[BeforeValue][sql_variant]不为空,
[AfterValue][sql_variant]不为空
)在[小学]
如何生成并添加触发器,以及如何插入AuditFieldTableName值?由于多个表中有不同类型的列,因此您指定的审核表实际上不足以解决问题。我建议采用以下审计表:
TABLE auditEntry (
auditEntryId INTEGER PRIMARY KEY,
operationType VARCHAR(10) NOT NULL, -- For INSERT / UPDATE / DELETE
changeTimestamp DATETIME NOT NULL,
madeBy VARCHAR(50) NOT NULL,
tableName VARCHAR(30) not null, -- stores the name of the table changed
columnName VARCHAR(30) not null, -- stores the name of column changed
oldInt INTEGER,
newInt INTEGER,
oldVarchar VARCHAR(100),
newVarchar VARCHAR(100),
oldDate DATETIME,
newDate DATETIME)
现在我认为,如果您具有编写表的实用知识,那么为表上的
INSERT
、UPDATE
和DELETE
编写行级触发器是一件容易的事。搜索MSDN以了解如何编写此类触发器,您会很好。原始详细信息表中的sql\u variant
列解决了数据类型问题。部分回答:“如何生成此…”您可以取出注释标记('--')并执行命令。我已经为你取出了评论标记。您可能还需要输入特定的表名。