ASP.NET 使用事务操作数据库,如何获取在事务中都操作了哪些数据?例如删除了哪些增加了哪些?

解决方案 »

  1.   

    是sql server的事务,我就想记录事务成功是操作了哪些数据, 对新旧数据做记录。
      

  2.   

    每一个表的每一个update、delete操作都是可以记录更新数据的,但是对性能有很大影响。而且这也需要你自己编写触发器代码,有数据库编程概念。
      

  3.   

    触发器中有专门存放新增修改删除的数据表,inserted/deleted。
      

  4.   

    SQL2008  有个功能,    开启代理服务,  直接可以保存你修改的表数据插入到 代理服务器生成的一个表,  完全可以对照的
      

  5.   

    触发器也可以完成。 写个  inserted/deleted触发器, 做这些动作的时候 先保存起来。然后在执行原本操作,   你说的和事物无关
      

  6.   

    给你一段sql,你可以查到这个数据库任何时候的运行的sql
    SELECT TOP 1000
    st.text,QS.sql_handle,
    SUBSTRING(ST.text,(QS.statement_start_offset/2)+1,
    ((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
    ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1
    ) AS statement_text,
    ST.text,
    QS.creation_time,
    QS.total_worker_time,
    QS.last_worker_time,
    QS.max_worker_time,
    QS.min_worker_time
    FROM
    sys.dm_exec_query_stats QS
    CROSS APPLY
    sys.dm_exec_sql_text(QS.sql_handle) ST
    WHERE
    QS.creation_time BETWEEN '2019-03-1 17:05:00 ' AND '2019-3-1 17:08:59'
    ORDER BY
    QS.creation_time DESC
      

  7.   

    正解,  编写触发器。
    或者程序里面写日志,  事物执行得时候成功则记录执行得sql 其实也可以查询。
      

  8.   

    三个方案:
    1、数据库层制作触发器或者其他手段在更新后写log。
    2、业务层在更新数据库之前在本地写log。
    3、使用SqlDependency等监听手段监听表,在代码中实现log。这些根据你的实际需求去定怎么做。
    第一个方案只能制造log,如果你打算在插入后做什么处理还要做表数据扫描,数据库资源消耗大。
    第二个方案相对灵活但是如果你的框架不好没办法直接从底层实现log和后续动作你的代码工作量很大,但是优势是全部使用本地资源没有增加数据库服务器资源消耗。
    第三个方案是数据库资源和本地资源消耗折中的方案,更可以监听select等事件,但是并不是常见方案(依托两边系统才能保证正常的方案稳定性会差)。
      

  9.   

    晕 你要知道是哪张表,不会 加个where 条件啊。。charindex('表名',  statement_text) > 1 那么出来的就是 这张表 所有的增删改查的sql 脚本。。