公司有个生产管理系统,我在生产计划表里某个成品的“交货期”字段输入一个数值,并登陆到数据库,我想知道数据库里都影响了哪些表的哪些记录的哪些值,这个难不难?

解决方案 »

  1.   

    如果跟踪数据库的改变用 DDL触发器.
    如果是数据变化 用DML 触发器
      

  2.   

    如果是跟踪数据库变化.建一个DDL触发器即可!USE 数据库;
    GO
    CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
    GO
    CREATE TRIGGER log 
    ON DATABASE 
    FOR DDL_DATABASE_LEVEL_EVENTS 
    AS
    DECLARE @data XML
    SET @data = EVENTDATA()
    INSERT ddl_log 
       (PostTime, DB_User, Event, TSQL) 
       VALUES 
       (GETDATE(), 
       CONVERT(nvarchar(100), CURRENT_USER), 
       @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), 
       @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
    GO
    --Test the trigger
    CREATE TABLE TestTable (a int)
    DROP TABLE TestTable ;
    GO
    SELECT * FROM ddl_log ;
    GO
    --结果/*
    PostTime                                      DB_User              Event                                     TSQL
    ----------------------------------      ------------------     -----------------                                ---------------------------------
    2006-04-26 18:54:26.200              dbo                     CREATE_TABLE                  CREATE TABLE TestTable (a int)  
    2006-04-26 18:54:26.200             dbo                      DROP_TABLE                      DROP TABLE TestTable ;  
    */
      

  3.   

    二楼,再次谢谢你。
    但是你输出的TSQL字段只有“CREATE”、“DROP TABLE”吗?没有完整的sql语句?
      

  4.   

    --是完整的DDL脚本啊. CREATE TABLE TestTable (a int)  DROP TABLE TestTable ;  
      

  5.   

    --如果是DML 操作. 也只能给每一个表建触发器了.--用sp_msforeachtable 批量建触发器
      

  6.   

    服务器: 消息 170,级别 15,状态 1,过程 log,行 3
    第 3 行: 'DDL_DATABASE_LEVEL_EVENTS' 附近有语法错误。
    服务器: 消息 195,级别 15,状态 1,过程 log,行 6
    'EVENTDATA' 不是可以识别的 函数名。
    服务器: 消息 170,级别 15,状态 1,过程 log,行 12
    第 12 行: '.' 附近有语法错误。
      

  7.   


    --DDL 是SQL Server 2005 提供的新的支持.
    --DML 在 SQL Server 2000 中支持.
      

  8.   

    DDL触发器是否只有在SQLSERVER2005中有?
      

  9.   

    怎么“天才”也和我有相同的问题吗?
    二楼,我们公司用的是SQL SERVER 2000,我先自己看看DML相关,你如果有时间,可以将2000下面的方法贴一下吗?
    只要我知道我的一个操作在数据库里影响了哪些东西(SQL 语句)就可以了。
      

  10.   

    事件探察器是可以,但是事件探察器只能针对SQL实例跟踪(比如我要跟踪数据库A,但事件探察器连数据库B的相关操作也跟踪了),探察出来的很多东西我都不需要,我要在里面搜索才能找到我要的,比较麻烦。
      

  11.   

    我发这个帖子的目的是这样的:
    我想知道我的一个操作被我们公司的ERP系统执行了哪些操作,知道后我可以在二次开发程序里面达到相同的目的而绕过ERP。
      

  12.   

    TO:楼主 
    事件探察器可以设置过滤条件的。设置之后,探察出来的很多东西都是你需要的
    还有第三方工具LOG Explorer挺好用的!