2017-10-30 7 views
1

通常、バージョンデータを公開するには、rowversion型の列を追加する必要がありますが、この操作は大きなテーブルではかなりの時間がかかります。とにかく私はdevのサンドボックス環境でやっていましたが、実際にはしばらくかかりましたが、コラムには意味のある初期値が設定されていました。私はすべての行が何らかの「初期」状態になっていることを示すために0または1であることを期待していましたが(結局のところ、前に履歴はありませんでしたが)、各行の正確な値すべてデフォルト値ではない)。列を追加しないSQL Serverのrowversion

彼らはどこから来ましたか?とにかく、あなたが列にそれを公開しているかどうかに関わらず、rowversionが舞台裏で追跡されているようです。もしそうなら、列を追加せずに直接取得することはできますか?私が直接呼び出すことができるシステム機能のようなものでしょうか?私は本当にダウンタイムを避けたいと思っています。また、膨大な数の既存のクエリがあるので、別のテーブル/ビュー/コンボへの移行はオプションではありません。

答えて

1

rowversion(a.k.a timestamp)値のテーブルが変更されたときに値が生成されます。 rowversionの値はデータベーススコープで、最後に生成された値は@@DBTSで取得できます。

ローバウンドテーブルが変更された場合にのみ値が増分されるため、ダウンタイムを避けるために@@DBTSを使用することはできません。

+0

しかし、私は既存のテーブルに列を追加したときに一見 "正しい"値で列を初期化することができましたか?列が存在する前であっても 'rowversion'が生成され、追跡されているようです。そうでなければ、新しい列のデフォルト値としてどのようなことを知ることができますか? – gzak

+0

@gzak - 'SELECT CAST(@ DBTS AS bigint)'は、このグローバルデータベースカウンタの現在の値を返します。新しい 'rowversion'カラムを追加すると、そこからインクリメントしていく値が入力されます。 –

関連する問題