是否可以在 SQL Server 2005 中将行插入表中时找到日期+时间?
SQL Server 是否记录插入命令?
每当我创建一个表时,我总是包含以下两列:
CreatedBy varchar(255) default system_name,
CreatedAt datetime default getdate()
尽管这使用了一些额外的空间,但我发现随着时间的推移,这些信息证明非常非常有用。
你的问题是关于日志的。答案是“是”。但是,能否获取信息取决于您的恢复模式。如果简单,则为下一个事务覆盖记录。如果是bulk 或full,则信息在日志中,至少自上次增量备份以来是这样。
只要您使用 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'
);
您可以在表格上有一个 InsertDate 默认 getdate() 列,这将是最简单的方法。
在 SQl Server 2008 上,您可以使用CDC控制表上更改的数据
更改数据捕获记录应用于 SQL Server 表的插入、更新和删除活动。这使得更改的详细信息以易于使用的关系格式提供。为修改的行捕获列信息和将更改应用于目标环境所需的元数据,并将其存储在反映跟踪源表的列结构的更改表中。提供表值函数以允许消费者系统地访问更改数据。