0

背景情報

何らかの理由で、xml から複数のテーブルに巨大なデータを挿入しているときに、主キーがオフセットだけシフトされます.. (複数回の試行が失敗したためかもしれません:P)

tableA と tableB の 2 つのテーブルがあります。それらは 1 対 5 の関係にあります。tableA は親テーブルであり、主キー列があります...たとえば DataIndex です。

今DataIndexはこのように出てきました..

685、686、687...など。

子テーブル、つまり TableB に存在する対応する値は同じです。

問題

DataIndex が 1、2、3 などから始まるように値をシフトするにはどうすればよいですか。両方のテーブルで?

4

3 に答える 3

1

主キーは、実際には、挿入時に自動的にインクリメントされる ID 列であると想定しています。必要なことは、ID 列を「再シード」することです。これを行うには、テーブルの名前を変更し、元の名前で複製テーブルを作成してから、古いテーブルから新しいテーブルにデータを挿入します (主キー フィールドはリセットされ、再び 1 から自動インクリメントされます)。挿入を行うときは、他のテーブルでの参照用に、古い主キー値を追加の列として必ず含めてください。

関連するテーブルを一致させるにはUPDATE、古い主キー値で新しいテーブルに結合するだけです。

UPDATE tableB SET
   PRIMARYKEYCOLUMN = tableA.PRIMARYKEYCOLUMN
FROM tableA
WHERE
   tableA.OLDPRIMARYKEYCOLUMN = tableB.PRIMARYKEYCOLUMN
于 2013-02-07T13:11:40.520 に答える
0

私は次のことをします:

  1. PK を指す外部キーのリストを作成します。
  2. ALTERすべての FK、ON UPDATE CASCADE句の追加。この手順は、一部のデータベースでは機能しない場合があります。制約を再度行う必要がある場合がありDROPますCREATE
  3. 次のように、最小の現在の PK 値を見つけます。SELECT min(id) FROM tableA;
  4. PK 値を更新します。UPDATE tableA SET id = id - min_id + 1;
  5. ON UPDATE CASCADE句を削除します。

サイズと使用しているデータベース エンジンによってはtableA、テーブルを完全に再構築してデータ ファイルの肥大化を回避する方が高速で簡単な場合があることに注意してください。

于 2013-02-07T13:25:40.793 に答える
0
  1. PK を削除
  2. DB CURSOR のいずれかでレコードをウォークスルーするか、任意の言語でスクリプトを記述して、ID を順次読み取り、変更します。
  3. PK の復元
  4. PK の正しい ID シードをセットアップする

シードを変更すると、ID 列の削除と再作成が必要になる場合があります。

于 2013-02-07T13:09:54.270 に答える