0

既存のデータベースは、すでに複数のクライアントに展開されています。

ここでアドオンを開発し、新しく追加した PK-FK テーブルの行をさまざまなターゲット データベースに転送する必要があります。しかし、ターゲットがその特定の PK を既に使用している可能性があるため、PK をコピーすることはできず、更新スクリプトを作成するときに不明な状態になります...

ソース データベースの PK 番号を、ターゲット PK に干渉しないように十分に高くすることを期待して、たとえば 1 万ずつ増やす以外に、何かアイデアはありますか?

ありがとう

4

2 に答える 2

0

すべてのPK行に対してscope_identity()を保持し、FKテーブルでこの値を使用するスクリプトで変数を使用できます。

于 2012-06-02T20:44:55.230 に答える
0

私はおそらく終わるだろう

  • int PK および FK と並行してテーブルに GUID を追加します。
  • これらのフィールドに newid() を入力し、それらの値を FK テーブルにコピーします。
  • 次に、新しく追加した行を FK データなしで転送します (チェック制約を無効にした後)
  • 次に、GUID 参照を使用して int FK 値を修正します。

そのスクリプトには時間がかかります...

更新: Mikael のコメントのおかげで、目の前に解決策が見つかりました:

  • 新しい「PK シャドウ」列を追加し、デフォルトで PK 値に設定します。
  • 次に、デフォルトを削除します(したがって、ターゲットスキーマを拡張するときにターゲットデータベースにnull値が含まれます)
  • したがって、行を転送した後 ( ID 挿入なし)、古い PK への参照がまだあります。
  • FKテーブルをPKシャドウ列に結合するすべての「壊れた」FKを更新するだけで済みます

ここにスクリプトがあります:http://www.morrenth.com/transferring-some-rows-having-.aspx

于 2012-06-02T20:14:59.067 に答える