2013-07-12 33 views
2

我使用的是MS SQL Server 2008,我有一個sql表,每天早上6點由sql作業插入一些數據。我遇到的問題是,有些數據已分別插入到作業中,我需要知道何時添加了這些數據。你可以告訴什麼時候數據被插入到表

有沒有一個查詢我可以運行,會告訴我這個?

+0

你可以嘗試觸發 –

回答

1

我認爲簡短的答案是否定的,沒有神奇的特別的SQL查詢,可以讓你回到事後並找出行被插入。

如果您想知道何時插入行,最簡單的方法是簡單地添加帶默認值的日期或時間戳字段(例如getDate()),該行會自動填充日期/時間插入。

當然,還有可用的SQL日誌,可以讓您跟蹤行插入,更新,刪除等情況,但需要設置和維護。

第三種選擇是讓插入數據的程序執行一些日誌記錄。

3

將一個日期字段添加到表中。你可以給它一個默認值GETDATE()

然後ORDER BY那個字段。

SELECT Column1, Column2, NewDateColumn 
FROM YourTable 
ORDER BY NewDateColumn 
+0

OP沒有提及任何關於'OEDER',但需要知道何時添加這個數據 – armen

+2

@armen - 是的,但是當你查看數據肯定是你想要它被命令?我個人不希望通過50,000條記錄尋找一個特定的日期..... –

+1

我明白,但你不會命令要麼滾動,並找到所需的日期在這些50.000行 – armen

0

你可能需要看看SQL CREATE TRIGGER添加邏輯知道所添加的數據時,並登錄另一個表爲將來採取進一步行動的信息。沒有進一步的細節,我不確定我們可以說更多。

+1

我個人認爲這裏的觸發器是過分的,因爲日期列就足夠了。 –

+1

您認爲添加列是安全的。我不是。這就是全部:-) –

+0

爲什麼要添加一列不安全? –

0

由於您指的是已插入的數據,所以答案爲否,除非您已經有一個日期時間列,其默認值爲GETDATE()。事件發生後您可以管理的最好方法是查看行的順序並確定它是在兩個已知時間之間。

0

什麼,我會做的是:

/* add new column to keep inserted row date */ 
ALTER TABLE [schemaName].[tableName] ADD [RecTime] DATETIME; 

/* update the existing rows with the current date since there is no way to guess their insertion date */ 
UPDATE [schemaName].[tableName] SET [RecTime] = GETDATE(); 

/* and set a constraint to the RecTime column to set current date on every new row added */ 
ALTER TABLE [schemaName].[tableName] ADD CONSTRAINT [DF_tableName_RecTime] DEFAULT (GETDATE()) FOR [RecTime] 

那麼你就可以得到這樣的行:

SELECT * 
FROM [schemaName].[tableName] 
WHERE NOT(DATEPART(hh, RecTime) = 6 AND DATEPART(mi, RecTime) <= 20) 

你可以「玩」與「20」,如果你知道SQL作業運行

多久
相關問題