2010-07-29 120 views
1

我需要保持表中記錄數的每日統計。SQL Server - 每天自動計算總數

有沒有辦法自動計算每天的記錄並將結果寫入另一個表?也許使用SQL代理作業或類似的東西?

我正在使用SQL Server 2008.

謝謝!

編輯: 如果我從1/1/2010今天刪除所有記錄,統計仍然需要證明在1/1/2010有在這一天結束了500條記錄。所以僅僅使用GetDate()和總結不起作用,因爲我會在2010年1月1日使用該方法獲得0條記錄。

回答

2

到表添加一列,像這樣:

ALTER TABLE My_Table 
ADD insert_date DATETIME NOT NULL DEFAULT GETDATE() 

然後,您可以查詢針對如SQL預期。

+0

+1:從視圖中獲取計數 – 2010-07-29 19:32:51

+0

這不起作用,因爲可能會刪除記錄。 – Alex 2010-07-29 19:33:13

+0

@Alex:然後刪除DELETE訪問,並使用STATUS_TYPE_CODE表和外鍵將這些記錄標記爲DELETED ... – 2010-07-29 19:34:49

0

SQL Job很好 - 是的。

或者您可以將日期列添加到缺省爲GETDATE()的表中。如果您不希望您的日常計數受到人們在事後刪除記錄的影響,則這不起作用。

1

在我看來,你用最好的選擇回答了你自己的問題。創建一個剛剛調用存儲過程的作業,獲取計數並對其進行標記。

Tom H.提到的其他選擇是一個更好的選擇,但如果無論因爲什麼原因都無法更改表格,那麼該作業就是一個不錯的選擇。

另一種選擇是在該表上放置一個插入觸發器以增加計數,但這可能會影響性能,具體取決於實施方式。

通過SQL Management Studio界面設置作業很簡單,具有運行頻率和要調用的存儲過程的時間表。您甚至可以直接在該步驟的命令窗口中寫入命令,而不是調用sp。

2

插入觸發器:今天更新計數表記錄(插入如果尚未創建)
刪除觸發器:減量今天計數表記錄(插入如果尚未創建)

+0

+1:基於明確的要求,優於SQL代理作業 – 2010-07-29 19:39:08

+0

爲什麼每天可能更新表1000次,而不是隻在一天結束時計算一次天?觸發方法對我來說似乎也更容易出錯。 – 2010-07-29 19:46:18

1

湯姆與OMG_Ponies'關於墓碑編答案而不是刪除是最好的答案。如果您擔心在某一天的表中有多少記錄,則很有可能某天有人會在當天詢問有關這些記錄的信息

如果這是一個不行,那麼正如其他人所說的那樣,創建第二個表,併爲該日的最後一條記錄的PK創建一個字段,然後計算當天,然後創建一個在每天結束並使用OrginalTable.PK> MAX(NewCountTable.Last_PK_Field)對所有記錄進行計數,並將該行(Last_PK_Field,Count)添加到NewCountTable中。