2014-03-24 87 views
3

有沒有辦法在SQL中插入一行到期(c.f.你可以插入一個新的鍵,在一分鐘內用Memcached過期)?SQL:插入到期的行

上下文是,我想要一個集成測試插入行到數據庫中,但我不希望自己刪除它們,因爲它被許多人共享。這些刪除查詢必須是手動的,否則它們可能不會運行,或者它們可能具有災難性的拼寫錯誤等。如果可以的話,我希望系統爲我做這件事(即自動且高效並經過良好測試)。

(我想這是不是SQL標準的一部分,答案是否定的。)

相關:SQL entries that expire after 24 hours

相關:What is the best way to delete old rows from MySQL on a rolling basis?

背景:我不能做任何修改數據庫架構或任何關聯的基礎架構。

+4

你的假設可能是正確的;開箱即用的SQL標準沒有任何內容。 –

+0

只是一個想法:添加一個觸發器,基於將輸入數據的用戶存儲到表(假設他們只進行測試)和row_ID或該行的某個唯一標識符。寫入一個作業來處理表中的條目,刪除存儲表中記錄的表單源,如果成功則刪除存儲表中的條目。監視以確保超過24小時的記錄不在新表中。 – xQbert

+1

我認爲你所要求的是實現[時間數據庫](http://en.wikipedia.org/wiki/Temporal_database)。您需要使用'有效時間'來在到期後停止使用行。 – user2989408

回答

0

將過期日期列添加到您的表中。創建一個作業,刪除某個時間表上過期的數據(比如每晚)。

+0

然後忘掉這個功能,並在幾個月後突然刪除了實際的數據。 – ElmoVanKielmo

+0

或者有時間在現場工作並在工作中使用 – Jesse

+0

@elmo顯然,您可以通過多種方式防止該問題...如果您需要刪除(測試)數據,那麼使用這樣的簡單系統可能會更好。 .. –

1

如果你正在進行單元測試,我建議將每個單元測試包裝在BEGIN TRAN/ROLLBACK

由於您正在進行集成測試,因此您可能需要數據超出單個事務的範圍。 SQL Agent在這裏可以很好地工作,除了它不區分測試數據和真實數據。但是,您可以通過INSERT來解決此問題,在到期時將某些標識符添加到要刪除的特定記錄中。這可以在一個存儲過程中完成。

您可以通過使用SQL Server Service Broker來完成此操作。我沒有與服務代理合作過,但也許有一種方法可以延遲消息處理,直到特定的時間過去。