timestamp (Transact-SQL)

データベース内で自動的に生成され、一意の 2 進数を公開するデータ型です。timestamp は、一般的にはバージョンを印すテーブル行として使用されます。記憶領域のサイズは 8 バイトです。データ型 timestamp は単に数値を加算していくだけのもので、日付や時刻を保持する機能はありません。日付や時刻を記録するには datetime 型を使用します。

解説

各データベースには、データベース内の timestamp 列を含むテーブルで実行される Insert 操作または Update 操作ごとに増加するカウンタがあります。このカウンタは、データベース タイムスタンプです。このカウンタは、時計に関連付けられる実際の時刻ではなく、データベース内の相対的な時間を追跡します。1 つのテーブルに許可される timestamp 列は、1 つだけです。timestamp 列のある行が変更または挿入されるたびに、増加したデータベース タイムスタンプ値が timestamp 列に挿入されます。このため、timestamp 列はキー、特に主キーとして適切ではありません。行を更新するとタイムスタンプ値が変わるので、キーの値も変わります。列が主キー内にある場合、以前のキーの値は無効になり、この以前の値を参照する外部キーも無効になります。動的カーソルでテーブルを参照する場合、すべての更新操作はカーソル上の行の位置を変更します。列がインデックス キー内にある場合、データ行を更新すると、インデックスも更新されます。

行の timestamp 列を使用すると、行が前回読み取られて以降、行の値が変更されたかどうかがすぐに分かります。行が変更された場合、タイムスタンプ値が更新されています。行が何も変更されていない場合、タイムスタンプ値は前回の読み取り時と同じです。データベースの現在のタイムスタンプ値を返すには、@@DBTS を使用します。

Transact-SQL timestamp データ型は、SQL-2003 標準で定義されている timestamp データ型とは異なります。SQL-2003 timestamp データ型は、Transact-SQL datetime データ型と同じです。

rowversiontimestamp データ型のシノニムであり、データ型のシノニムの動作が適用されます。DDL ステートメントでは、可能な限り timestamp ではなく rowversion を使用してください。詳細については、「データ型のシノニム (Transact-SQL)」を参照してください。

CREATE TABLE または ALTER TABLE ステートメントでは、timestamp データ型の列名を指定する必要はありません。次に例を示します。

CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);

列名を指定しない場合、Microsoft SQL Server 2005 データベース エンジンは timestamp 列名を生成しますが、rowversion のシノニムの場合は動作が異なります。rowversion を使用する場合は、列名を指定してください。

ms182776.note(ja-jp,SQL.90).gifメモ :
timestamp 列が SELECT リスト内にある SELECT INTO ステートメントを使用すると、重複するタイムスタンプ値が生成される場合があります。このような timestamp は使用しないことをお勧めします。

NULL 値を許容しない timestamp 列は、binary(8) 列と同じ意味です。NULL 値を許容する timestamp 列は、varbinary(8) 列と同じ意味です。

参照

関連項目

ALTER TABLE (Transact-SQL)
CAST および CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)
データ型 (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DELETE (Transact-SQL)
INSERT (Transact-SQL)
MIN_ACTIVE_ROWVERSION (Transact-SQL)
SET @local\_variable (Transact-SQL)
UPDATE (Transact-SQL)

その他の技術情報

データ型の変換 (データベース エンジン)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手