如题 我想把对这张表的操作全部记录下来 应该怎么做 请高手请赐教不胜感激数据库是SQL 2008的

解决方案 »

  1.   

    比如你对人员表(User_Id,User_name.....)操作,你想记录对它的增删改
    那你可以创建一张日志表专门用来记录对表的更改:
    日志表结构(id int identity(1,1),当前登录用户,当前库用户,当前库名,当前表名,操作方式,操作时间,表记录Key)
    对人员表的更改,其触发器中可以这么写:
    create trigger tri_test
    on 人员表
    for update,insert,delete
    as
    begin
        if exists(select 1 from inserted) and not exists(select 1 from deleted)--只插入
             insert 日志表 select SYSTEM_USER,user_name(),db_name(),'日志表','插入',getdate(),User_id from inserted
        ELSE if not exists(select 1 from inserted) and exists(select 1 from deleted)--只删除
            insert 日志表 select SYSTEM_USER,user_name(),db_name(),'日志表','删除',getdate(),User_id from deleted
        ELSE 
        begin
         INSERT 日志表 select SYSTEM_USER,user_name(),'日志表','更新前',getdate(),User_id from inserted
         INSERT 日志表 select SYSTEM_USER,user_name(),'日志表','更新后',getdate(),User_id from deleted
        END 
    END这样就达到了简单的记录操作表的日志
      

  2.   

    SQL 2008 直接对该表配置“审核”就 ok 了。
    -- 创建服务审核。
    -- 也可以在 SSMS 中实例的“security\audit”节点下创建。
    USE master
    GO
    CREATE SERVER AUDIT audit_name TO FILE (filepath='c:\');
    GO
    ALTER SERVER AUDIT audit_name WITH (STATE=ON);
    GO-- 创建数据库审核——对指定表的 DQL 和 DML 语句操作进行审核。
    -- 也可以在 SSMS 中数据库的“security\database audit specification”节点下创建。
    USE dbname
    GO
    CREATE DATABASE AUDIT SPECIFICATION database_audit_name
    FOR SERVER AUDIT [audit_table]
    ADD (DELETE ON OBJECT::[schema_name].[table_name] BY [public]),
    ADD (INSERT ON OBJECT::[schema_name].[table_name] BY [public]),
    ADD (SELECT ON OBJECT::[schema_name].[table_name] BY [public]),
    ADD (UPDATE ON OBJECT::[schema_name].[table_name] BY [public])
    WITH (STATE = ON)
    GO-- 查看。
    -- 也可以直接通过 SSMS 中实例的“security\audit”节点下对应的服务审核查看。
    SELECT * FROM SYS.fn_get_audit_file('c:\audit_name*.sqlaudit',default,default);