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
列解决了数据类型问题。部分回答:“如何生成此…”您可以取出注释标记('--')并执行命令。我已经为你取出了评论标记。您可能还需要输入特定的表名。