【问题标题】:view the changed values after an update statement在更新语句后查看更改的值
【发布时间】:2011-09-29 14:58:42
【问题描述】:

只是想知道是否可以在更新命令发生后查看表上的更改?

事务日志是否会存储此类信息,即这是以前/当前的值这是新的/更改的值

不确定这是否可能。服务器是 ms sql 2008

【问题讨论】:

    标签: sql-server-2008 transaction-log


    【解决方案1】:

    事务日志确实包含信息,虽然解码它不是微不足道的 - 我写了一篇博客文章,其中有一个解码事务日志中简单更新语句的示例 - http://sqlfascination.com/2010/02/21/decoding-a-simple-update-statement-within-the-transaction-log/

    但是,根据正在执行的更新,日志中的条目会变得更加复杂,并且没有关于如何解码它们的文档。对它们进行逆向工程非常困难。

    我绝不会建议使用这种检查日志的技术来检索数据,它只值得从内部学习的角度/取证的角度进行研究。

    【讨论】:

      【解决方案2】:

      您可以使用 OUTPUT 将更改插入另一个表和/或返回更改的结果集:

      set nocount on
      DECLARE @Table     table (PK int, col1 varchar(5))
      DECLARE @SavedPks  table (PK int)
      
      INSERT INTO @Table VALUES (1,'g')
      INSERT INTO @Table VALUES (2,'g')
      INSERT INTO @Table VALUES (3,'g')
      INSERT INTO @Table VALUES (4,'g')
      INSERT INTO @Table VALUES (5,'x')
      INSERT INTO @Table VALUES (6,'x')
      set nocount off
      
      UPDATE @Table
          SET col1='xyz'
          OUTPUT INSERTED.PK INTO @SavedPks --save in a table
          OUTPUT 'result set',INSERTED.PK, INSERTED.col1 AS new_col1, DELETED.col1 AS old_Col1 --result set
          WHERE col1='g'
      
      select * from @Table
      select * from @SavedPks
      

      输出:

                 PK          new_col1 old_Col1
      ---------- ----------- -------- --------
      result set 1           xyz      g
      result set 2           xyz      g
      result set 3           xyz      g
      result set 4           xyz      g
      
      (4 row(s) affected)
      
      PK          col1
      ----------- -----
      1           xyz
      2           xyz
      3           xyz
      4           xyz
      5           x
      6           x
      
      (6 row(s) affected)
      
      PK
      -----------
      1
      2
      3
      4
      

      【讨论】:

      • 但是在更新语句运行后这不会起作用吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多