2

是否可以在 SQL Server 2005 中将行插入表中时找到日期+时间?

SQL Server 是否记录插入命令?

4

3 回答 3

3

每当我创建一个表时,我总是包含以下两列:

CreatedBy varchar(255) default system_name,
CreatedAt datetime default getdate()

尽管这使用了一些额外的空间,但我发现随着时间的推移,这些信息证明非常非常有用。

你的问题是关于日志的。答案是“是”。但是,能否获取信息取决于您的恢复模式。如果简单,则为下一个事务覆盖记录。如果是bulk 或full,则信息在日志中,至少自上次增量备份以来是这样。

于 2012-05-31T13:30:46.923 回答
2

只要您使用 cdc 创建的函数来提取实际数据记录,就可以导出插入日期。

因此,例如,如果您要拉出类似的东西:

DECLARE @from_lsn binary(10), @to_lsn binary(10);                         

SET @from_lsn=sys.fn_cdc_get_min_lsn ( 'name_of_your_cdc_instance_on_cdc_table' );
SET @to_lsn=sys.fn_cdc_get_max_lsn();

SELECT * FROM 
cdc.fn_cdc_get_net_changes_name_of_your_cdc_instance_on_cdc_table
(
    @from_lsn, 
    @to_lsn, 
    N'all'
);

您可以使用 cdc 内置函数sys.fn_cdc_map_lsn_to_time将日志序列号转换为日期时间。下面的用例:

SELECT sys.fn_cdc_map_lsn_to_time(__$start_lsn),* FROM 
cdc.fn_cdc_get_net_changes_name_of_your_cdc_instance_on_cdc_table
(
    @from_lsn, 
    @to_lsn, 
    N'all'
);
于 2012-11-05T18:00:11.750 回答
1

您可以在表格上有一个 InsertDate 默认 getdate() 列,这将是最简单的方法。

在 SQl Server 2008 上,您可以使用CDC控制表上更改的数据

更改数据捕获记录应用于 SQL Server 表的插入、更新和删除活动。这使得更改的详细信息以易于使用的关系格式提供。为修改的行捕获列信息和将更改应用于目标环境所需的元数据,并将其存储在反映跟踪源表的列结构的更改表中。提供表值函数以允许消费者系统地访问更改数据。

于 2012-05-31T13:32:39.147 回答