2013-02-21 65 views
5

我使用Miscrosoft SQL Server 2012中和,因爲在這種article說:T-SQL 「時間戳」 覆蓋 「rowversion」 數據類型列

時間戳語法已被棄用。此功能將在 未來版本的Microsoft SQL Server中刪除。避免在 新開發工作中使用此功能,並計劃修改當前使用此功能的 應用程序。

我決定使用「rowversion」列代替「timestamp」列。所以,我創建瞭如下表:

CREATE TABLE [dbo].[TestTable] 
(
    [Col001] [INT] NOT NULL 
    ,[Col002] [CHAR](2) NOT NULL 
    ... 
    ,[Col00N] [DATETIME2] NOT NULL 
    ,[RowVersionID] [ROWVERSION] NOT NULL 
    ,CONSTRAINT [PK_ProtoSurveyGlobalizationChanges_RowVersionID] PRIMARY KEY CLUSTERED 
    (
     [RowVersionID] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

,一切都看沒事,直到我按下「ALT + F1」的組合,讓我的信息我的表(樣柱的細節),我已經看到, 「RowVersionID」列標有類型「timestamp」。

下一個認爲我所做的一切,是「刪除並創建我的表」使用SQL Server Management Studio的2012和「生成SQL」改變了我這樣的原始查詢:

[RowVersionID] [timestamp] NOT NULL 

爲什麼服務器沒有使用最初設置的類型,爲什麼在文章中我建議不要使用「時間戳」,但服務器在某種程度上選擇它?

+0

rowversion是一個時間戳。它已重新命名,因爲時間戳不符合ISO標準。把它作爲排隊並停止擔心它。 – 2013-02-21 08:26:03

+0

那麼,如果我指定「rowversion」或「timestamp」,那麼最終沒有區別?服務器正在爲我使用正確的嗎? – gotqn 2013-02-21 08:27:13

+0

只有一個符合。 timnestamp已被棄用,並可能在稍後的日期被刪除。 – 2013-02-21 08:27:53

回答

9

它們是同義詞,服務器無法告訴(一旦創建了表)您實際用於創建表的單詞。

很明顯,在深度深處,timestamp已被棄用的消息尚未達到負責編寫SQL Server腳本組件的人 - 因此腳本仍然會說timestamp

+3

+1 esp。對於「深處的某個地方,這個消息......」:) – 2013-02-21 08:29:53

5

rowversiontimestamp。他們是一樣的東西。

timestamp是rowversion數據類型的同義詞,並且 是數據類型同義詞的行爲。在DDL語句中,儘可能使用 rowversion而不是時間戳。

Ref

它已重新命名,因爲timestamp不符合ISO標準。而且因爲人們錯誤地認爲時間戳可以代表實際的日期時間點的可能性較小。

只需將其保留爲rowversion即可。 timestamp已被棄用,並可能在以後的日期被刪除。

+1

是的,我意識到這一點,但我擔心的是我使用「rowversion」,但似乎SQL Server不理解或表示,所以當「時間戳」被刪除時會發生什麼。更重要的是,文章甚至建議重寫使用「timestamp」的語句。 – gotqn 2013-02-21 08:32:06

+0

你正在擔心一個不存在的問題。繼續.... – 2013-02-21 08:32:47