SQL Server2000でテーブルを作成する必要があります。
create table TABLE (
DBID_ bigint not null,
CLASS_ varchar(255) not null,
DBVERSION_ integer not null,
HPROCI_ bigint,
TYPE_ varchar(255),
EXECUTION_ varchar(255),
ACTIVITY_NAME_ varchar(255),
START_ timestamp,
END_ timestamp,
DURATION_ bigint,
TRANSITION_ varchar(255),
NEXTIDX_ integer,
HTASK_ bigint,
primary key (DBID_)
);
実行するとエラーが発生します。
テーブルに含めることができるタイムスタンプ列は1つだけです。テーブル
TABLE
にはすでに1つあるため、列END_
追加できません。
SQLServerのtimestamp
の最良の代替手段は何ですか?この問題を修正する方法は?
timestamp
は、名前が示すように日時データ型ではありません。これはサーバーのクロックに対してrelativeである内部値ですが、実際の時刻はその値から導出できません。これは単に行が更新されたかどうかを評価するために使用されるため、テーブルにはこのタイプの列を1つだけ含めることができます。 timestamp
構文は実際には非推奨になり、名前が rowversion
になりました。これは、はるかに理にかなっています。
列名(Start、End)を指定すると、実際のタイムスタンプを保存しようとしていると想定し、代わりにデータ型としてdatetime
を使用する必要があります。
SQL Serverでは、timestamp
はデータ型であり、時間ではありません。これは基本的にレコードをバージョン管理する方法であり、切断されたデータベースモデルでの楽観的ロックに使用されます。レコードをロードするときに、タイムスタンプ列を取得します。タイムスタンプ列の値が同じである場合にのみ書き戻します。これは、取得してから他の誰も変更していないことを意味します。
実際のdatetime
値が必要な場合は、null以外の日時を追加するか、デフォルトをGetDate()
にして、更新のたびに更新することを忘れないでください。