http://xthanks.blog.163.com/blog/static/7891148201131545556817/
timestamp
SQL Server timestamp 資料類型與時間和日期無關。SQL Server timestamp 是
位元字,它表明資料庫中資料修改發生的相對順序。實現 timestamp 資料類型最初是為了支援 SQL Server 恢複演算法。每次修改頁
時,都會使用當前的 @@DBTS 值對其做一次標記,然後 @@DBTS 加1。這樣做足以協助恢複過程確定頁修改的相對次序,但
是 timestamp 值與時間沒有任何關係。
在 SQL Server 7.0 版
和 SQL Server 2000 中,@@DBTS 只在 timestamp 列中使用時其值才會遞增。如果一個表包含 timestamp 列,
則每次由 INSERT、UPDATE 或DELETE 語句修改一行時,此行的 timestamp 值就被置為當前的 @@DBTS 值,然
後 @@DBTS 加1。
因為每一次修改時 timestamp 值都會改變,所以千萬不要在鍵(特別是主鍵)中使用 timestamp 列。
若要記錄表中發生的資料修改次數,可用 datetime 或 smalldatetime 資料類型來記錄這些事件和觸發器,這樣,當發生修改時,就可以自動更新其值。
公開資料庫中自動產生的唯一位元字的資料類型。timestamp 通常用作給表
行加版本戳
的機制。 儲存大小為 8 個位元組。 timestamp 資料類型只是遞增的數字,不保留日期或時間
。 若要記錄日期或時間,請使用 datetime 資料類型。
備忘
每
個資料庫都有一個計數器,當對資料庫中包含 timestamp 列的表執行插入或更新操作時,該計數器值就會增加。 該計數器是資料庫時間戳記。 這可以
追蹤資料庫內的相對時間,而不是時鐘相關聯的實際時間。 一個表只能有一個 timestamp 列。 每次修改或插入包含 timestamp 列的行
時,就會在 timestamp 列中插入增量資料庫時間戳記值。 這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。 對行的任何更新都會更改 timestamp 值
,從而更改索引值。 如果該列屬於主鍵,那麼舊的索引值將無效,進而引用該舊值的外鍵也將不再有效。 如果該表在動態資料指標中引用,則所有更新均會更改遊標中行的位置。 如果該列屬於索引鍵,則對資料行的所有更新還將導致索引更新。
使
用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以後是否發生了更改。 如果對行進行了更改,就會更新該時間戳記值。 如果
沒有對行變更,則該時間戳記值將與以前讀取該行時的時間戳記值一致。 若要返回資料庫的目前時間戳值,請使用 @@DBTS
。
Transact-SQL timestamp 資料類型不同於在 SQL-2003 標準中定義的 timestamp 資料類型。 SQL-2003 timestamp 資料類型等同於 Transact-SQL datetime 資料類型。
rowversion 的資料類型為 timestamp 資料類型的同義字,並具有資料類型同義字的行為。 在 DDL 語句,請盡量使用 rowversion 而不是 timestamp。 有關詳細資料,請參閱 資料類型同義字 (Transact-SQL)。
在 CREATE TABLE 或 ALTER TABLE 語句中,不必為 timestamp 資料類型指定列名,例如:
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);
如果不指定列名,則 Microsoft SQL Server 2005 資料庫引擎將產生 timestamp 列名;但 rowversion 同義字不具有這樣的行為。 在使用 rowversion 時,必須指定列名。
注意:
在使用其中的 SELECT 列表中具有 timestamp 列的 SELECT INTO 語句時,可能會產生重複的時間戳記值。 建議不要以這種方式使用 timestamp。
不可為空白的 timestamp 列在語義上等同於 binary(8) 列。 可為空白的 timestamp 列在語義上等同於 varbinary(8) 列。
#利用時間戳記可以從伺服器上更新本機資料。