SQL Server里的TimeStamp是如何使用的?與Binary(8)又是什么關(guān)系?
這個(gè)問(wèn)題第1個(gè)回答:
e 沒(méi)用過(guò) 頂頂
這個(gè)問(wèn)題第2個(gè)回答:
SQL codecreate table xx(id int, timestamp)insert into xx(id) select 1select * from xx
這個(gè)問(wèn)題第3個(gè)回答:
防止并發(fā)用的,可以和bigint相互轉化
這個(gè)問(wèn)題第4個(gè)回答:
沒(méi)關(guān)系,是記錄版本用的
這個(gè)問(wèn)題第5個(gè)回答:
SQL codecreate table tb_test(id int, ts timestamp)insert tb_test(id) select 1union all select 2union all select 3union all select 4select *, nts=cast(ts as bigint) from tb_test/*id ts nts----------- ------------------ --------------------1 0x0000000000001F41 80012 0x0000000000001F42 80023 0x0000000000001F43 80034 0x0000000000001F44 8004(4 row(s) affected)*/drop table tb_test
這個(gè)問(wèn)題第6個(gè)回答:
SQL codedeclare @n bigintset @N=8001select cast(@N as timestamp)/*------------------0x0000000000001F41(1 row(s) affected)*/
這個(gè)問(wèn)題第7個(gè)回答:
公開(kāi)數據庫中自動(dòng)生成的唯一二進(jìn)制數字的數據類(lèi)型。timestamp 通常用作給表行加版本戳的機制。 存儲大小為 8 個(gè)字節。 timestamp 數據類(lèi)型只是遞增的數字,不保留日期或時(shí)間。 若要記錄日期或時(shí)間,請使用 datetime 數據類(lèi)型。
備注
每個(gè)數據庫都有一個(gè)計數器,當對數據庫中包含 timestamp 列的表執行插入或更新操作時(shí),該計數器值就會(huì )增加。 該計數器是數據庫時(shí)間戳。 這可以跟蹤數據庫內的相對時(shí)間,而不是時(shí)鐘相關(guān)聯(lián)的實(shí)際時(shí)間。 一個(gè)表只能有一個(gè) timestamp 列。 每次修改或插入包含 timestamp 列的行時(shí),就會(huì )在 timestamp 列中插入增量數據庫時(shí)間戳值。 這一屬性使 timestamp 列不適合作為鍵使用,尤其是不能作為主鍵使用。 對行的任何更新都會(huì )更改 timestamp 值,從而更改鍵值。 如果該列屬于主鍵,那么舊的鍵值將無(wú)效,進(jìn)而引用該舊值的外鍵也將不再有效。 如果該表在動(dòng)態(tài)游標中引用,則所有更新均會(huì )更改游標中行的位置。 如果該列屬于索引鍵,則對數據行的所有更新還將導致索引更新。
使用某一行中的 timestamp 列可以很容易地確定該行中的任何值自上次讀取以后是否發(fā)生了更改。 如果對行進(jìn)行了更改,就會(huì )更新該時(shí)間戳值。 如果沒(méi)有對行進(jìn)行更改,則該時(shí)間戳值將與以前讀取該行時(shí)的時(shí)間戳值一致。 若要返回數據庫的當前時(shí)間戳值,請使用 @@DBTS。
Transact-SQL timestamp 數據類(lèi)型不同于在 SQL-2003 標準中定義的 timestamp 數據類(lèi)型。 SQL-2003 timestamp 數據類(lèi)型等同于 Transact-SQL datetime 數據類(lèi)型。
rowversion 的數據類(lèi)型為 timestamp 數據類(lèi)型的同義詞,并具有數據類(lèi)型同義詞的行為。 在 DDL 語(yǔ)句,請盡量使用 rowversion 而不是 timestamp。 有關(guān)詳細信息,請參閱 數據類(lèi)型同義詞 (Transact-SQL)。
在 CREATE TABLE 或 ALTER TABLE 語(yǔ)句中,不必為 timestamp 數據類(lèi)型指定列名,例如:
復制代碼
CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);
如果不指定列名,則 Microsoft SQL Server 2005 數據庫引擎將生成 timestamp 列名;但 rowversion 同義詞不具有這樣的行為。 在使用 rowversion 時(shí),必須指定列名。
注意:
在使用其中的 SELECT 列表中具有 timestamp 列的 SELECT INTO 語(yǔ)句時(shí),可能會(huì )生成重復的時(shí)間戳值。 建議不要以這種方式使用 timestamp。
不可為空的 timestamp 列在語(yǔ)義上等同于 binary(8) 列。 可為空的 timestamp 列在語(yǔ)義上等同于 varbinary(8) 列。
這個(gè)問(wèn)題第8個(gè)回答:
路過(guò),
大多數情況下估計是等同效果.
這個(gè)問(wèn)題第9個(gè)回答:
實(shí)際應用中使用它嗎?
這個(gè)問(wèn)題第10個(gè)回答:
to dobear_0922:
看樣子,本帖的關(guān)鍵點(diǎn)還是在于:怎么使用TimeStamp進(jìn)行防止并發(fā)?
多謝!
這個(gè)問(wèn)題第11個(gè)回答:
anyone?
這個(gè)問(wèn)題第12個(gè)回答:
學(xué)習
這個(gè)問(wèn)題第13個(gè)回答:
時(shí)間戳,可以轉換為時(shí)間。。
可以記錄每次操作的時(shí)間。。
這個(gè)問(wèn)題第14個(gè)回答:
樓上的回答要扣分了哈:
SQL Server timestamp 是二進(jìn)制數字。
SQL Server timestamp 數據類(lèi)型與時(shí)間和日期無(wú)關(guān)。
這個(gè)問(wèn)題第15個(gè)回答:
樓上的回答要扣分了哈:
SQL Server timestamp 是二進(jìn)制數字。
SQL Server timestamp 數據類(lèi)型與時(shí)間和日期無(wú)關(guān)。
--------------------------------------------------------
timestamp確實(shí)可以轉為datetime
timestamp應該是用于防止并發(fā)沖突的吧.
這個(gè)問(wèn)題第16個(gè)回答:
timestamp還可以在數據同步時(shí)判定歷史數據是否更新
這個(gè)問(wèn)題第17個(gè)回答:
timestamp 這種數據類(lèi)型表現自動(dòng)生成的二進(jìn)制數,確保這些數在數據庫中是唯一的
binary 是二進(jìn)制數據類(lèi)型,可以認為,前者是后者的一個(gè)特例(即子集),只不過(guò)系統為你做了一部分工作。
timestamp既然命名為時(shí)間戳,當然也記錄了日期信息,只不過(guò)是以二進(jìn)制方式存儲的。但是它的值范圍小于datetime,也屬于datetime的子集。
SQL codedeclare @n bigintset @N=8001select cast(@N as timestamp)declare @d datetimeset @d=8001 -- 以1900-1-1為初始時(shí)間按dd去dateadd,8001dd.select cast(@d as timestamp)declare @x datetimeset @x='1921-11-28'select cast(@x as binary(8))
這個(gè)問(wèn)題第18個(gè)回答:
主要作用應該是如16樓所述。
并發(fā)通常用 uniqueidentifier 值。