2013-02-21 15 views
5

Sto usando Miscrosoft SQL Server 2012 e perché in questo article è detto:T-SQL "timestamp" sovrascrive "rowversion" tipo di dati di colonna

La sintassi timestamp è deprecato. Questa funzionalità verrà rimossa in una versione futura di Microsoft SQL Server . Evita di utilizzare questa funzione nel nuovo lavoro di sviluppo e pianifica di modificare le applicazioni che attualmente utilizzano .

Ho deciso di utilizzare la colonna "rowversion" invece la colonna "timestamp". Così, ho creato la seguente tabella:

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] 

E tutto stava guardando tutto bene, fino a quando ho premuto "ALT + F1" combinazione che mi dà informazioni sul mio tavolo (come colonne dettagli) e ho visto che la colonna "RowVersionID" è contrassegnata con il tipo "timestamp".

La prossima pensare che ho fatto, è stato quello di "drop e creare la mia tavola" utilizzando SQL Server Management Studio 2012 e la "SQL generato" cambia la mia domanda originale in questo modo:

[RowVersionID] [timestamp] NOT NULL 

Perché il server non sta usando il tipo che ho impostato inizialmente e perché nell'articolo mi viene consigliato di non usare "timestamp" ma in qualche modo il server lo sta scegliendo?

+0

rowversion è un timestamp. È stato rinominato perché il timestamp non è conforme allo standard ISO. Lascialo come rowversion e smettila di preoccupartene. –

+0

Quindi, non c'è alcuna differenza dopo aver specificato "rowversion" o "timestamp"? Il server sta usando quello corretto per me? – gotqn

+0

Solo uno di conformità. timnestamp è deprecato e probabilmente verrà rimosso in un secondo momento. –

risposta

9

Sono sinonimi, non c'è modo per il server di dire (una volta che la tabella è stata creata) quale parola hai effettivamente usato per creare la tabella.

Ovviamente, da qualche parte nelle profondità, la notizia che lo timestamp è deprecato non ha raggiunto chi è responsabile della scrittura del componente di scripting di SQL Server, quindi gli script dicono ancora timestamp.

+3

+1 esp. per "da qualche parte nelle profondità, la notizia che ..." :) –

5

rowversion è un timestamp. Sono la stessa cosa.

timestamp è il sinonimo per il tipo di dati rowversion ed è soggetto al comportamento dei sinonimi di tipo di dati. Nelle istruzioni DDL, utilizzare rowversion anziché timestamp ove possibile.

Ref.

È stato rinominato perché timestamp non è conforme allo standard ISO. E perché c'è meno possibilità che le persone pensino erroneamente che il timestamp possa rappresentare un vero e proprio punto di riferimento nel tempo.

Lasciare semplicemente dichiarato come rowversion. timestamp è deprecato e sarà probabilmente rimosso in un secondo momento.

+1

Sì, ne sono consapevole, ma la mia preoccupazione è che sto usando "rowversion" ma sembra che SQL Server non capisca o indichi che , quindi cosa succederà quando viene rimosso "timestamp". Qualcosa di più, l'articolo consigliato anche per riscrivere le dichiarazioni che utilizzano "timestamp". – gotqn

+0

ti stai preoccupando di un problema che non esiste. Vai avanti.... –