如何确定我的表是在sql server中更新的

时间:2011-10-04 07:16:58

标签: sql-server transactions

我在sql server 2005中有一个表。昨天在表上执行了更新,然后更新回原始记录。
现在我想弄清楚更新的值是什么。至少我想知道它是否真的更新了。
有什么方法可以从交易日志中确定我想要的东西吗? 感谢。

2 个答案:

答案 0 :(得分:2)

有一个undocumented command

  

DBCC日志(dbname,0 | 1 | 2 | 3 | 4)

     

其中

     

0:最低限度信息(默认)

     

1:使用0 +返回可用信息   标志,标签和日志记录长度。

     

2:使用返回信息   1 +对象,索引,页面ID和插槽ID。

     

3:关于的最大信息   每次操作。

     

4:每项操作的最大信息+   当前事务日志行的十六进制转储

请阅读:Looking for a SQL Transaction Log file viewer

答案 1 :(得分:2)

虽然不是一个精确的方法(例如,您只有上次重启SQL Server的数据),但您可以尝试使用sys.dm_exec_query_stats视图:

CREATE TABLE dbo.LongTableName (ID INT IDENTITY(1,1) PRIMARY KEY, Column1 VARCHAR(10) NOT NULL);

INSERT LongTableName VALUES ('A');
INSERT LongTableName VALUES ('BB');
INSERT LongTableName VALUES ('CCC');
WAITFOR DELAY '00:00:05';
INSERT LongTableName VALUES ('DDDD');
GO

SELECT  ca.[text], s.last_execution_time, s.last_logical_reads, s.last_logical_writes, s.execution_count 
FROM    sys.dm_exec_query_stats s
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) ca
WHERE   ca.[text] LIKE '%INSERT%LongTableName%'
GO

DROP TABLE LongTableName;
GO

例如,其中一条记录为:

text    last_execution_time     last_logical_reads  last_logical_writes execution_count
(@1 varchar(8000))INSERT INTO [LongTableName] values(@1)    
        2011-10-04 10:51:17.070 2                   0                   4