2010-12-05 14 views
5

私のテーブルに列があります。たとえば、updateStampです。私は行の更新時に新しい連続番号でそのフィールドを更新するアプローチを得たいと思います。SQL Server - 更新時に一意のシーケンシャル番号を生成する方法

データベースには大量のトラフィックがありますが、ほとんどの場合は読み取りますが、複数の同時更新もバッチで発生する可能性があります。したがって、ソリューションは最小のロックを引き起こすはずです。

この要件の理由は、クライアントがテーブル転送を繰り返し実行する必要があり、行が更新されている場合は、結果セットに再び表示されるはずです。

ので、クエリは、複数の更新が同時に起こる可能性があるため、残念ながらタイムスタンプはここで働いていない

SELECT * 
FROM mytable 
WHERE updateStamp > @lastReturnedUpdateStamp 
ORDER BY updateStamp 

ようなものです。

+0

何SQL Serverのバージョンはありますか? SQL Server 2008の場合、「変更の追跡」は、必要な処理を行い、「タイムスタンプ」とトランザクションのコミット時間に関する微妙な問題を回避します。 –

+0

2008 R2、私は使用しています。提案ありがとう!私はそのような特徴を知らなかった。これは私の要求には過剰ですが。 – user431529

答えて

2

(非推奨)またはrowversion(現在)のデータ型が、行の書き込み操作ごとに更新されていることがわかっている唯一のデータ型です。

日付、時間、秒などを保存しないタイムスタンプではありません。実際にはRowVersion(名前が変更されています)行に

通常、行を読み込んだ時刻と更新する時刻との間の変更を確認するために使用されます。

実際には日付/時刻情報ではないので、人が読める情報のために別の列を持つ必要があります。テーブルにLastModified DATETIME列を追加し、DEFAULT GETDATE()制約を使用すると、挿入時に新しい値を挿入できます。最新の状態に保つには、更新が発生したときにLastModified列を更新するAFTER UPDATEトリガーを作成する必要があります。 SQL Serverの2011(別名「デナリ」)はここにあなたのケースで完璧にフィットすることになる私たちにSEQUENCESをもたらす

- 悲しいかな、公式リリースから「まだ1年以上その.....

+0

これは私の場合に最適です。テストされ、それは正常に動作します!しかし、奇妙なことに、SQL Server管理スタジオは提案ボックスにrowversionデータ型を提供していません。したがって、今はタイムスタンプを使用しなければなりません。 – user431529

関連する問題