将行插入表中的日期

时间:2012-05-31 13:27:47

标签: sql sql-server sql-server-2005

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

SQL Server是否记录插入命令?

3 个答案:

答案 0 :(得分:3)

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

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

虽然这会占用额外的空间,但我发现随着时间的推移,这些信息非常有用。

您的问题是关于日志。答案是肯定的。但是,您是否可以获取信息取决于您的恢复模式。如果简单,则记录将被覆盖以用于下一个事务。如果是批量或完整,则信息在日志中,至少自上次增量备份以来。

答案 1 :(得分: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'
);

答案 2 :(得分:1)

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

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

  

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