只是想知道是否可以在更新命令发生后查看表上的更改?
事务日志是否会存储此类信息,即这是先前/当前值这是新的/更改的值
不确定这是否可能。服务器是 ms sql 2008
只是想知道是否可以在更新命令发生后查看表上的更改?
事务日志是否会存储此类信息,即这是先前/当前值这是新的/更改的值
不确定这是否可能。服务器是 ms sql 2008
事务日志确实包含信息,虽然解码它不是微不足道的 - 我写了一篇博客文章,其中有一个解码事务日志中简单更新语句的示例 - http://sqlfascination.com/2010/02/21/decoding-事务日志中的简单更新语句/
但是,根据正在执行的更新,日志中的条目会变得更加复杂,并且没有关于如何解码它们的文档。对它们进行逆向工程非常困难。
我永远不会建议使用这种检查日志的技术来检索数据,它只值得从内部学习的角度/取证的角度进行研究。
您可以使用 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