Sql 在表中插入行的日期

Sql 在表中插入行的日期,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,在SQLServer2005中,是否可以找到将行插入表的日期+时间 SQL Server是否记录插入命令?每当我创建表时,我总是包括以下两列: CreatedBy varchar(255) default system_name, CreatedAt datetime default getdate() 虽然这会占用一些额外的空间,但我发现随着时间的推移,这些信息证明非常非常有用 你的问题是关于日志的。答案是肯定的。但是,能否获取信息取决于您的恢复模式。如果很简单,那么记录将被覆盖以用于下一个

在SQLServer2005中,是否可以找到将行插入表的日期+时间


SQL Server是否记录插入命令?

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

CreatedBy varchar(255) default system_name,
CreatedAt datetime default getdate()
虽然这会占用一些额外的空间,但我发现随着时间的推移,这些信息证明非常非常有用


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

您可以在表中设置InsertDate default getdate()列,这是最简单的方法

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

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


只要使用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\u cdc\u map\u lsn\u to\u 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'
);

为什么您的表中没有自己的
DateTime
列来记录这一点?没有。除非您的表中有一个
DateTime
列来跟踪此日期+时间,否则无法找到这一点。请查看以下其他答案:-基本上,如果您想以可靠的方式知道插入行的时间,您添加了一个默认值为当前时间戳的新datetime列。我有一个名为“ORDER_DATE”的列,其默认值为GETDATE(),但某些insert命令也有ORDER_DATE值,它们是错误的。因此,某些订单日期值不正确:(如果你显式地重写了默认值,你就有点运气不好了。为什么会发生这种情况?为什么你的INSERT语句中提到了该列?你能解释一下如何通过读取日志来找出插入行的时间吗?是的,我在寻找。但是CDC在Sql Server 2005中不可用吗?不,我刚才提到它是为了让你知道。)现在它已经存在了。我说了“在SQl Server 2008上”:(CDC在2008年默认运行,还是我必须将其设置为运行?我可以使用它SQl Server 2008 Web Edition