SQL Server timestamp 數據類型與時間和日期無關。SQL Server timestamp 是二進制數字,它表明數據庫中數據修改發生的相對順序。實現 timestamp 數據類型最初是為了支持 SQL Server 恢復算法。每次修改頁時,都會使用當前的 @@DBTS 值對其做一次標記,然后 @@DBTS 加1。這樣做足以幫助恢復過程確定頁修改的相對次序,但是 timestamp 值與時間沒有任何關系。
@@DBTS 返回當前數據庫最后使用的時間戳值。插入或更新包含 timestamp 列的行時,將產生一個新的時間戳值。
select @@DBTS
適用場景:
通過timestamp字段查詢變更數據,假如上次保存的時間戳的值是:0x0000000000163E30,那么我們通過下面的SQL腳本就能獲取到這個時間戳之后變更的記錄,獲取到這里數據就可以更新內存數據了
注意事項:
1. 每個數據庫都有一個計數器,當對數據庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。 該計數器是數據庫時間戳;
2. 一個表只能有一個 timestamp 列;
3. 注意刪除數據操作是沒有辦法記錄時間戳的,所以你刪除記錄的邏輯應該是用一個字段標識這行記錄已經被刪除;
4. 這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用;
5. 如果該列屬於索引鍵,則對數據行的所有更新還將導致索引更新;
6. 若要返回數據庫的當前時間戳值:SELECT @@DBTS
7. 在 DDL 語句,請盡量使用 rowversion 而不是 timestamp,在SSMS設計表的時候是沒有rowversion數據類型的;
8. 在 CREATE TABLE 或 ALTER TABLE 語句中,不必為 timestamp 數據類型指定列名,如果不指定列名,則 Microsoft SQL Server 數據庫引擎將生成 timestamp 列名;但 rowversion 同義詞不具有這樣的行為。 在使用 rowversion 時,必須指定列名。
9. 不可為空的 rowversion 列在語義上等同於 binary(8) 列。 可為空的 rowversion 列在語義上等同於 varbinary(8) 列。
