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

Posted

技术标签:

【中文标题】如何确定我的表在 sql server 中已更新【英文标题】:how to determine that my table was updated in sql server 【发布时间】:2011-10-04 07:16:58 【问题描述】:

我在 sql server 2005 中有一个表。昨天对表执行了更新,然后更新回原始记录。 现在我想弄清楚更新的值是什么。至少我想知道它是否真的更新了。 有没有办法从事务日志中确定我想要什么? 谢谢。

【问题讨论】:

【参考方案1】:

有一个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

【讨论】:

我在运行命令时收到了一些数据。但是我如何过滤这些返回记录以查看我的表是否在特定日期更新?有可能吗? @Fer 可能不是,但你可以尝试有一个相对的时间范围。如果您知道某个更新在某个日期完成(例如每天执行的作业),您可以搜索它。 我知道确切的时间(昨天上午 9:19)。但是,当时数据库上有数百个更新/插入。所以我需要为一个特定的表运行命令。如果这不可能,我想我将无法学习它。【参考方案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

【讨论】:

这是一个了不起的方式。但不幸的是,我今天重新启动了系统,所以我无法显示今天早上之前的更改。我需要昨天的记录。

以上是关于如何确定我的表在 sql server 中已更新的主要内容,如果未能解决你的问题,请参考以下文章

当数据库中的表在java中更新时如何立即更新jcombobox

出现:“数据库中已存在名为 'Assembles' 的对象。”问题,无法更新数据库,请问知道如何处理吗??

在 SQL Server 2008 R2 中为每个表创建创建触发器

使用 Python 将 Csv 文件写入 SQL Server 数据库中已有的表

如何在 SQL Server 中显示小数点后两位数

在 SQL Server 触发器中处理多行