0

レプリケーション環境でパブリッシャーとして SQL Server データベースをセットアップしています。それにはいくつかのサブスクリプションがあり、いくつかの異なる人々がINSERTこれらについてステートメントを実行しています. ID 列にはさまざまな値の範囲が割り当てられているため、すべてのデータがパブリケーションにプッシュされると、最終的に非常に幅広いバリエーションになります。

これは当然のことであり、本番環境では望ましいことです。ただし、私たちはまだ開発中であるため、すべての ID 値を再編成して、それらが連続するようにしたいと考えています。の代わり[1,2,3,1001,1001,1003][1,2,3,4,5,6]. これは、ID 列の値を変更し、それらがサポートする関係全体でそれに応じて更新することを意味することを認識しています。このようなことは可能ですか?

4

1 に答える 1

0

Management Studio で作成するときに ID 列をシードします。

コードを使用してテーブルを作成する場合は、Transact-SQL (T-SQL) の CREATE TABLE ステートメントを次の形式で使用して、テーブルの ID 列を簡単にシードできます。

CREATE TABLE tablename 
(
  columnname datatype identity [(seed, increment)
  [NOT FOR REPLICATION]],
  [columnname ...]
)

コードでは、datatype は数値列です。シードと増分はどちらもオプションで、両方のデフォルト値は 1 です。

図 B は、CREATE TABLE を使用して Orders という名前のテーブルを作成し、OrderID 列の ID シード値と増分値をそれぞれ 100 と 10 に設定した結果を示しています。ご覧のとおり、最初の ID 値は 100 で、後続の各値は 10 ずつ増加します (increment に負の値を指定すると、ID 値を減らすことができます)。

また、CREATE TABLE を使用して ID 列をシードします。

チェックと再シード

たとえば、テーブルのすべてのレコードをアーカイブ テーブルにコピーしてから、ソース テーブルのすべてのレコードを削除する場合、ソース テーブルの ID 列を再シードして、順序を制御できるようにすることができます。T-SQL の DBCC CHECKIDENT を次のように使用して、ID 列を再シードします。

DBCC CHECKIDENT    
(    
  tablename    
  [, [NORESEED | RESEED [, newreseedvalue]]]    
)

[WITH NO_INFOMSGS]

表 A は、このステートメントのオプションのパラメーターを定義しています。

表 A: DBCC CHECKIDENT

パラメータ

説明

NORESEED 現在の ID 値と ID 列の現在の最大値を再シードせずに返します。これらの値は、通常、同じである必要があります。

RESEED 現在の ID 値が ID 列に格納されている最大 ID 値より小さい場合、ID 列の最大値を使用して現在の ID 値を変更します。

newreseedvalue 再シード時の新しいシード値を指定します。テーブルが空の場合、最初の ID 値 (DBCC CHECKIDENT の実行後) は newreseedvalue と等しくなります。テーブルにデータが含まれている場合、次の ID 値は newreseedvalue + 現在のインクリメント値 (デフォルトは 1) と等しくなります。この動作は、SQL Server 2005 の新機能です (2008 年も引き続き)。SQL Server 2000 は常にシード値を増やします。

WITH NO INFOMSGS すべての情報メッセージを抑制します。

技術的には、DBCC CHECKIDENT は ID 値をチェックして修正します。簡単に言えば、現在の ID 値を学習するか、既存の ID 列を再シードするために使用します。

于 2012-09-16T17:54:10.523 に答える