2013-02-21 7 views
5

Ich verwende Miscrosoft SQL Server 2012, und weil in diesem article gesagt:T-SQL "Zeitstempel" überschreibt "rowversion" Datentyp Spalte

Der Zeitstempel Syntax ist veraltet. Diese Funktion wird in einer zukünftigen Version von Microsoft SQL Server in einer entfernt. Vermeiden Sie die Verwendung dieser Funktion in neue Entwicklungsarbeit, und planen Sie, Anwendungen zu ändern, die derzeit diese Funktion verwenden.

Ich habe mich entschieden, Spalte "rowversion" anstelle von "timestamp" Spalte zu verwenden. So habe ich die folgende Tabelle erstellt:

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] 

Und alles sah alles in Ordnung, bis ich gedrückt haben „ALT + F1“ Kombination, die mir Informationen über meine Tabelle gibt (wie Säulen Details), und ich habe gesehen, dass Die Spalte "RowVersionID" ist mit dem Typ "timestamp" markiert. mit SQL Server Management Studio 2012 und die „generierten SQL“ ändert sich meine ursprüngliche Abfrage wie folgt

Die nächste denken, dass ich es getan habe, war, „meinen Tisch Drop und erstellen“:

[RowVersionID] [timestamp] NOT NULL 

Warum den Server verwende nicht den Typ, den ich anfangs eingestellt habe, und warum in dem Artikel wird mir geraten, "Zeitstempel" nicht zu verwenden, aber irgendwie wählt der Server es?

+0

rowversion ist ein Zeitstempel. Es wurde umbenannt, weil der Zeitstempel nicht dem ISO-Standard entspricht. Lassen Sie es als rowversion und hören Sie auf, sich darüber Gedanken zu machen. –

+0

Also gibt es keinen Unterschied, wenn ich "rowversion" oder "timestamp" spezifiziere? Der Server benutzt den richtigen für mich? – gotqn

+0

Nur einer von konform. timnestamp ist veraltet und wird wahrscheinlich zu einem späteren Zeitpunkt entfernt. –

Antwort

9

Sie sind Synonyme, ohne dass der Server (sobald die Tabelle erstellt wurde) weiß, welches Wort Sie tatsächlich zum Erstellen der Tabelle verwendet haben.

Offensichtlich irgendwo tief in den Tiefen, die Nachricht, dass timestamp veraltet ist, hat nicht erreicht, wer verantwortlich für das Schreiben der Skriptkomponente von SQL Server ist - so die Skripts immer noch sagen timestamp.

+3

+1 esp. für "irgendwo tief in den Tiefen, die Nachrichten, die ..." :) –

5

rowversion ist ein timestamp. Sie sind das Gleiche.

timestamp ist das Synonym für den Datentyp rowversion und unterliegt dem Verhalten von Datentypsynonymen. Verwenden Sie in DDL-Anweisungen rowversion anstelle von Zeitstempel wann immer möglich.

Ref.

Es wurde umbenannt, weil timestamp nicht dem ISO-Standard entspricht. Und weil es weniger Wahrscheinlichkeit gibt, dass Leute fälschlicherweise denken, dass der Zeitstempel einen tatsächlichen Datum-Zeit-Zeitpunkt darstellen kann.

Lassen Sie es einfach als rowversion deklariert. timestamp ist veraltet und wird wahrscheinlich zu einem späteren Zeitpunkt entfernt.

+1

Ja, ich bin mir dessen bewusst, aber meine Sorge ist, dass ich "rowversion" verwende, aber es scheint, dass der SQL Server das nicht versteht oder angibt , was passiert, wenn "timestamp" entfernt wird. Etwas mehr, der Artikel riet sogar, die Anweisungen, die "Zeitstempel" verwenden, neu zu schreiben. – gotqn

+0

Sie sorgen sich um ein Problem, das nicht existiert. Mach weiter.... –

Verwandte Themen