SQL Server 2000函数记录创建的日期时间
当添加数据库中的记录时,我被赋予了显示任务,但是以前的开发人员从来没有为此做一个字段,而且我无法返回并为所有现有记录确定日期。有没有一种简单的方法可以从SQL Server 2000查询中提取记录创建日期。
SELECT RECORD_CREATED_DATE FROM tblSomething WHERE idField = 1
" RECORD_CREATED_DATE"不是现有表中的字段。是否有某种SQL函数可获取此信息?
解决方案
如果未将其存储为字段,则在事务日志回收后(通常每天),甚至可能更快,该信息就会丢失。
我不知道如何获取现有记录的此信息。但是,接下来,我们可以创建一个存储TableName和RecordCreateDate(或者类似名称)的审核表。
然后,对于相关表,我们可以创建一个插入触发器:
CREATE TRIGGER trigger_RecordInsertDate ON YourTableName AFTER INSERT AS BEGIN -- T-SQL code for inserting a record and timestamp -- to the audit table goes here END
不,很遗憾,插入日期或者最后更新日期不会自动与每个记录一起存储。
为此,我们需要在表中创建两个日期时间列(例如CreatedOn,UpdatedOn),然后在INSERT触发器中设置CreatedOn = getdate(),在UPDATE触发器中设置UpdatedUpdate = getdate()。
CREATE TRIGGER tgr_tblMain_Insert ON dbo.tblMain AFTER INSERT AS BEGIN set nocount on update dbo.tblMain set CreatedOn = getdate(), CreatedBy = session_user where tblMain.ID = INSERTED.ID END
我还喜欢创建CreatedBy和UpdatedBy varchar(20)列,将其设置为session_user或者通过其他方法进行更新。
创建另一列,并为其赋予默认值getdate(),该值将处理插入的日期,对于更新的日期,我们将需要编写更新触发器
我将从现在开始输入这些信息开始。创建两列,InsertedDate,LastUpdatedDate。在第一个上使用默认值getdate(),并在第二个上使用更新触发器(可能还需要考虑UpdatedBy)。然后,我将编写一个查询以使用CASE语句显示信息,以显示日期(如果有的话)并显示" Unknown"(该字段为空)。如果我们需要存储所有更新的记录,这将变得更加复杂。然后,我们需要使用审核表。