2

私は以下を使おうとしています:

CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    timestamp
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);

誰かがこれが正しい方法であるかどうかを確認できますか?また、その列に独自の名前を付けることはできますか、またはすべきですか?

* EntityFrameworkを使用していることに注意してください。では、このような列を追加しても、Applicationオブジェクトに追加しなくても大丈夫ですか?

4

3 に答える 3

6

timestampこれはそのデータ型(時間を保存しない)の名前としては不適切であり、Microsoftもその途中で使用を廃止し、SQLServer2008timestamp以降の使用を廃止してSQLServer2000でrowversion導入されたと思います。

コードはtimestamp、列にデフォルトの名前を付けるという動作を使用しますが、それをrowversion行わないため、列に名前を付ける必要があります。

CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    VerCol rowversion
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);

参照:
rowversion(Transact-SQL)
タイムスタンプSQL Server 2000

* EntityFrameworkの使用については何も知らないことに注意してください。

于 2013-03-04T06:57:32.003 に答える
0
CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    timestamp DATETIME NULL DEFAULT GETDATE()
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);
于 2013-03-04T06:53:31.760 に答える
0

タイムスタンプ/行バージョンを既存のテーブルに追加するには、これを行うことができます。

ALTER Table OrderAction ADD [RowVersion] rowversion not null

タイムスタンプが自動的に割り当てられます。次のようなものは必要ありません。UPDATE rowversion = getdate()

テーブルが大きい場合は、すべての行にタイムスタンプを追加する必要があるため、時間がかかる場合があることに注意してください。巨大なテーブルがあり、Azure SQLのようなスケーラブルなデータベースを使用している場合は、最初に容量を増やすか、営業時間外にそれを実行することをお勧めします。

timestampデータ型はデータ型と同じですrowversion-それはあなたが列と呼ぶものだけです。

また、またはで更新するためにデータモデルに含まれている必要はありません。ただし、データモデルに含まれていない場合は、次のように単純化するという全体的なポイントから実際にメリットを得ることができません。UPDATEINSERTUPDATE

WHERE ([OrderId] = @p0) AND ([RowVersion] = @p1)
于 2021-04-17T21:17:54.917 に答える