15

SQL Server 2000 でテーブルを作成する必要があります。

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_を追加できません。

timestampSQL Serverの最適な代替手段は何ですか? この問題を解決するにはどうすればよいですか?

4

2 に答える 2

44

Atimestampは、名前が示すように日時データ型ではありません。これはサーバーのクロックに相対的な内部値ですが、実際の時間はその値から導き出すことはできません。行が更新されたかどうかを評価するためにのみ使用されるため、テーブルにはこのタイプの列を 1 つだけ含めることができます。このtimestamp構文は実際には非推奨でありrowversion、より意味のある名前が付けられています。

列名 (Start、End) を指定すると、実際のタイムスタンプを保存しようとしており、代わりにdatetimeデータ型として使用する必要があります。

于 2012-08-21T22:24:14.847 に答える
4

In Sql Servertimestampはデータ型であり、時間ではありません。これは基本的にレコードをバージョン管理する方法であり、切断されたデータベース モデルでの楽観的ロックに使用されます。レコードをロードすると、タイムスタンプ列が取得されます。タイムスタンプ列の値が同じ場合にのみ書き戻します。これは、取得してから誰も変更していないことを意味するためです。

実際のdatetime値が必要な場合は、null 以外の日時を追加するか、デフォルトで日時を追加し、GetDate()すべての更新を更新することを忘れないでください。

于 2012-08-21T22:29:22.367 に答える