2008-09-22 79 views
4

我被給了一個任務來顯示數據庫中添加記錄的時間,但是以前的開發人員從未爲此創建過一個字段,並且我無法返回並補充日期所有現有記錄。是否有一種簡單的方法可以從SQL server 2000查詢中提取記錄創建日期。用於記錄創建日期時間的SQL Server 2000函數

SELECT RECORD_CREATED_DATE FROM tblSomething WHERE idField = 1 

RECORD_CREATED_DATE不是現有表中的字段。有沒有某種SQL函數來獲取這些信息?

回答

11

如果它不作爲字段存儲,那麼在事務日誌回收(通常是每日)之後,甚至更早的時間,信息將會丟失

+1

謝謝,這就是我的想法。 *嘆*。我希望有一些沒有記錄的函數調用或者什麼都不會在哪裏實現。項目經理不理解「不能完成」的概念。在這種情況下,不幸的是無法獲得他們想要的數據。 – stephenbayer 2008-09-22 17:59:54

1

我不知道有什麼方法可以獲取現有記錄的這些信息。然而,展望未來,你可以創建一個存儲表名和RecordCreateDate(或類似的東西審計表

然後,在相關表格,你可以讓一個INSERT觸發器:

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 
3

沒有呢,可惜的日期插入或最後一次更新都不會自動與每個記錄存儲。

要做到這一點,你需要在你的表中創建兩個日期時間列(例如CreatedOnUpdatedOn),然後在一個INSERT觸發設置CreatedOn = GETDATE()並在UPDATE觸發設置UpdatedOn = 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 

我也喜歡創建CreatedByUpdatedBy VARCHAR(20)列我設置爲SESSION_USER或更新通過其他方法。

+0

我通常會這樣做,但是當這個項目最初完成時,我並沒有參與。 – stephenbayer 2008-09-22 19:09:44

0

創建另一列並給它GETDATE(),將採取插入日期的人,因爲更新的日期,你需要寫一個更新觸發器的默認

1

我就開始把這些信息在從現在開始。創建兩列,即InsertedDate,LastUpdatedDate。在第一個上使用getdate()的默認值,在第二個上使用更新觸發器來填充第二個(也可能想要考慮UpdatedBy)。然後,我會寫一個查詢來顯示信息使用CASE語句來顯示日期,如果有的話顯示「未知」字段爲空。如果您需要存儲所有更新的記錄,這會變得更加複雜。然後你需要使用審計表。

相關問題