2010-12-02 28 views
2

データベースの "クリーンアップ"に取り組んでおり、IDENTITY列を同期させる必要があります。私はストアドプロシージャを使用してデータを処理し、あるテーブルから次のテーブルにデータをミラーリングします(データを整理してデータ型を修正した後)。将来のある時点で、私は古いテーブルをカットし、新しいテーブルだけを使用したいと思うでしょう。私の質問は、IDENTITYフィールドを両方とも使用している間同期させておく方法です...古いテーブルが削除されると新しいものは自動インクリメントを続ける必要があり、IDENTITYフィールドを変更するための再構築/変更はオプションではありません。これが可能か、これについてもっと良い方法がありますか?同期されたIDENTITY列を持つ複数のSQLテーブル

私のもう1つの考えは、両方のテーブルのIDカラムを格納するルックアップテーブルを作成することでした。新しいテーブルに挿入すると、古いIDと新しいIDを取り込み、ルックアップテーブルに挿入します。古いテーブルが途切れると、これはちょっと混乱します。

答えて

1
  1. 新しいテーブルのIDを非IDフィールドに設定します。
  2. データ集計手順を変更して、新しいテーブルの非同一性フィールドに古いテーブルのID値を入力します。
  3. カットオーバー時に、新しいフィールドを自動インクリメントに変更し、それに応じてset the seed numberに切り替えます。
+0

ID以外のフィールドにIDを変更するには、テーブルの再構築が必要ですか? – jon3laze

+0

どのSQLサーバーを使用していますか? MS SQLの場合、いいえ。関連するMSDN記事への上記のリンクの追加 –

+0

はいMSSQL。記事をありがとう。 – jon3laze

3

そこに、それを行った。古いIDをFKとして新しいテーブルに入れてください。古いテーブルを削除する直前にその列を削除します。

+0

私はこの考えが好きです(+1)。だからあなたの新しいテーブルを使用する前に、IDフィールドに型を変更しますか? –

+0

+1私はこのアイデアが好きですが、古いテーブルにはない新しいテーブルにレコードが追加されることを忘れました。私の解決策は、新しいテーブルのIDフィールドを非アイデンティティフィールドに変更し、古いテーブルにトリガを入れて新しいテーブルに移入することです。それから、カットオーバー時に私はアイデンティティに変わります。 – jon3laze

+0

いいえ、いいえ。新しいテーブルは独自のidフィールドを取得します。古いレコードまたは新しいレコードは、新しいテーブルに挿入されたときに新しいIDを取得します。 new_table.old_idのデフォルトはnullですが、古いテーブルからレコードをコピーするときは、old_idにold_tableというIDの値を指定します。insert new_table(c1、c2、old_id)old_tableからc1、c2、idを選択します。 – tpdi

関連する問題