這裡是備份,原文請看我的網站:[SQL Server]時間戳記。 timestamp與 rowversion資料型態

http://www.dotblogs.com.tw/mis2000lab/archive/2011/04/26/sql_timestamp_rowversion_20110426.aspx

 

 

 

 

 

[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時,您必須指定一個 [資料行(欄位)名稱]。

 

............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......

    ASP.NET 4.0 專題實務(松崗出版)

上 / 下兩集合購。全台"最"優惠價1,180元(免郵資)

上集全新改寫。範例增加66%,內容增加35%。銷售半年,高達三刷

下集(第二版,黑皮書)上市。2010一年內熱銷四刷! 下集內容增加66%。

上下兩集將近2,000頁,堪稱國內 [最詳盡]的ASP.NET範例教學。

............................. 寫信給我,mis2000lab (at) yahoo.com.台灣......

 

 

 

arrow
arrow
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()