7

私はMiscrosoftSQLServer 2012を使用していますが、この記事では次のように述べられています。

タイムスタンプ構文は非推奨になりました。この機能は、MicrosoftSQLServerの将来のバージョンで削除される予定です。新しい開発作業でこの機能を使用することは避け、現在この機能を使用しているアプリケーションを変更することを計画してください。

「timestamp」列の代わりに「rowversion」列を使用することにしました。そこで、次のテーブルを作成しました。

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

サーバーが最初に設定したタイプを使用していないのはなぜですか。また、記事で「タイムスタンプ」を使用しないようにアドバイスされているのに、サーバーがそれを選択しているのはなぜですか。

4

2 に答える 2

10

これらは同義語であり、サーバーが(テーブルが作成されると)実際にテーブルの作成に使用した単語を通知する方法はありません。

明らかに、深部のどこかで、timestamp非推奨のニュースは、SQL Serverのスクリプトコンポーネントの作成を担当する人には届いていません。そのため、スクリプトにはまだと書かれていますtimestamp

于 2013-02-21T08:27:54.753 に答える
6

rowversionですtimestamp。それらは同じものです。

タイムスタンプはrowversionデータ型の同義語であり、データ型の同義語の動作の影響を受けます。DDLステートメントでは、可能な限りタイムスタンプの代わりにrowversionを使用してください。

Ref

timestampISO規格に準拠していなかったため、名前が変更されました。また、タイムスタンプが実際の日時を表すことができると誤解される可能性が少ないためです。

として宣言したままにしておきrowversionます。timestampは非推奨であり、おそらく後日削除される予定です。

于 2013-02-21T08:28:58.930 に答える