時間戳記。 timestamp與 rowversion資料型態
這是顯示在資料庫內自動產生的 "唯一"二進位數字(Byte[])的資料類型。rowversion通常用來做為版本戳記資料表資料列的機制。儲存體大小是 8 位元組。rowversion資料類型只是會遞增的數字,因此不會保留日期或時間。
[SQL Server]時間戳記。 timestamp與 rowversion資料型態
SQL 2005 -- timestamp
http://msdn.microsoft.com/zh-tw/library/ms182776(v=SQL.90).aspx
微軟的建議 -- timestamp 語法已被取代。未來的 Microsoft SQL Server 版本將移除這項功能。
請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
SQL 2008起 -- rowversion
http://msdn.microsoft.com/zh-tw/library/ms182776(v=SQL.100).aspx
所謂的「時間戳記」,並 "不"是記錄一段日期與時間。
而是隨著時間變化,遞增這個時間戳記而已。
透過這個特性,
您在更新(Update)數據時,可以事先檢查這一筆記錄,
是否在您修改之前,已經被人更動過了。
在 SQL Server裡面查詢。
最後一個欄位就是採用 timestamp時間戳記
1 test111(修改後) 2011-04-26 14:42:00 0x000000000000DDEE
2 test222(修改後) 2011-04-23 00:00:00 0x000000000000DDE8
3 test333 2011-04-24 00:00:00 0x000000000000DDE3
4 test444 2011-04-25 00:00:00 0x000000000000DDE4
一旦您修改 (Update) 了某一列記錄(如:id=1這筆記錄)
時間戳記就會自動變成 0x000000000000DDE5 (......以此類推)
但是,程式無法把 timestamp呈現出來(直接呈現在畫面上)。
所以,您可能要採用這種兩方式稍作改寫:
======================================================================================
Dim s As String = New UTF8Encoding().GetString(dr.GetSqlBinary(3).Value)
Response.Write("test_timestamp(時間戳記) -- " & s & "<hr /><br />")
'-- 這種字串,呈現在畫面上會變成亂碼。
======================================================================================
或是
(這段作法我試過,成功。但轉換出來的字串,跟原本資料表的 timestamp內容,有一點差異。)
Dim SB As New StringBuilder()
For i As Integer = 0 To (dr.GetSqlBinary(3).Length - 1)
SB.Append(dr.GetSqlBinary(3).Item(i))
Next
Label1.Text = "test_timestamp(時間戳記) -- " & SB.ToString() & "<hr />"
其中的 dr代表 DataReader
dr.GetSqlBinary(3) 。 3代表第四個欄位(資料行 / Column)名稱 。
這都是基礎 ADO.NET的用法。
以下是微軟 MSDN網站的說明,寫得很詳細 (部分節錄如下)
這是顯示在資料庫內自動產生的 "唯一"二進位數字(Byte[])的資料類型。rowversion通常用來做為版本戳記資料表資料列的機制。儲存體大小是 8 位元組。rowversion資料類型只是會遞增的數字,因此不會保留日期或時間。若要記錄日期或時間,請使用 datetime2資料類型。
每個資料庫都有一個計數器,會針對在資料庫內包含 rowversion資料行的資料表所執行的每個插入或更新作業而累加。這個計數器是資料庫資料列版本。這會追蹤資料庫內的相對時間,而不是可關聯於時鐘的實際時間。資料表只能有一個 rowversion資料行。每次修改或插入含 rowversion資料行的資料列時,都會在 rowversion資料行中插入累加的資料庫資料列版本值。
不可為 Null 的rowversion資料行,語意等於 binary(8) 資料行。
可為 Null 的 rowversion資料行,語意等於 varbinary(8)資料行。
如果您沒有指定資料行(欄位)名稱,Microsoft SQL Server 2005 Database Engine會產生 timestamp資料行名稱;不過,rowversion同義字不會遵照這個行為。
當您使用 rowversion時,您必須指定一個 [資料行(欄位)名稱]。
注意 !! rowversion 欄位, 該欄位不建議成為索引鍵值
http://blogs.technet.com/b/technet_taiwan/archive/2015/01/16/tsql-series-0116.aspx
相關文章:
[MSDN] 如何寫出高效能 T-SQL
寫信給我-- mis2000lab (at) yahoo.com.台灣 或是 school (at) mis2000lab.net
................ Google+ https://plus.google.com/100202398389206570368/posts ........
................ YouTube (ASP.NET) 線上教學影片 http://goo.gl/rGLocQ
*********************************************************************************************
*** 第一天 的 ASP.NET MVC線上課程 免費看(5.5小時)***
************************************************************(歡迎索取,免費申請)*****
留言列表