2013-02-14 91 views
1

我有類似這樣的一個表:檢查字段更新SQL

StockId | Dispatched 
--------------------  
1234 | 0 
1234 | 1 

dispatched = 0直到順序是:在股票中的項目,然後將其更改爲= 1

這對今天的股票生成結果很好,因爲您可以執行查詢以顯示哪裏dispatched ='0'。然而,對於較舊的數據,我想查看某個日期的庫存情況,例如01/01/2010。是否有捷徑可尋?

感謝

+0

鑑於您展示的列,我沒有看到它是可能的。有沒有機會在表格中更新日期列?這並不完美,但可能有所幫助。真正需要的是一個歷史記錄表和一個觸發器,每當Dispatched標誌被改變時它就會填充它。 – 2013-02-14 16:23:29

+2

那麼,如果你沒有行上的日期字段,那麼你怎麼能約會一個日期?您需要創建一個單獨的歷史記錄/審計表,以保留對調度字段的任何更改。你可以通過源表上的觸發器來實現。 – OldProgrammer 2013-02-14 16:23:31

回答

3

而是以這種方式使用位或INT標誌的,只需更改派遣是一個日期或日期時間(可爲空 - 空將等同於當前的0)。然後你可以查詢你想要的任何日期比較。

雖然改變你的代碼應該是相當簡單的,如果你不能改變出動列,你有一些缺乏吸引力的替代品:

  • 添加另一個空列跟蹤的日期時間。
  • 添加DispatchedAt表,其中包含非空datetime和引用當前表的外鍵約束(classic 1NF)。
  • 添加一個包含系統生成日期時間的「歸檔表」,並在主表中填充觸發器。
  • 以您喜歡的方式創建一個新表格,並創建一個模仿舊錶格(具有相同名稱)的可更新視圖來「欺騙」您的應用程序。

如果這不只是一個新的功能,但歷史數據的可怕的重要性(監管審覈?),你可能會檢查你的事務日誌或備份時看到進行了更改,但這樣的解決方案將屬於在DBAs.SE上。