時間戳記。 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
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。
......... facebook社團 https://www.facebook.com/mis2000lab ......................
......... YouTube (ASP.NET) 線上教學影片 https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/
Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download
請看我們的「售後服務」範圍(嚴格認定)。
......................................................................................................................................................
ASP.NET MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。