1

テーブルの主キーを変更できる必要があります。問題は、一部のキーが既存のキー値に変更されることです。たとえば、record1.ID 3=>4 および record2.ID 4=>5 です。これらは外部キーとして設定されているため(更新をカスケードします)、これらを主キーとして保持する必要がありますこれを達成する合理的な方法はありますか、それともSQLの異端を試みていますか?

理由については、この主キーによってリンクされたテーブルのセットからのデータが、同様に構造化されたテーブルの別のセットに挿入/更新されています。挿入は重複排除プロセスの一部であるため、部分的に行われます。挿入されるすべてのテーブルを新しい主キーで単純に更新できれば、作業は楽になります。

1 つの解決策は、着信テーブルの行数が到達するよりも高い宛先テーブルでインデックス作成を開始することです (着信テーブルは毎回再インデックス化されます) が、それでも上記を実行できるかどうか知りたいです。それ以外は。

ティア

4

2 に答える 2

1

あなたはSQL異端を試みています。私は実際にはかなりオープンマインドで、クレイジーに見えることをしなければならないことがよくあります。人々が「違うやり方でやるべきだ」と傲慢に答えるとき、彼らが状況が何であるかを知っているとき、それは私を苛立たせます。ただし、これは別の方法で行う必要があることをお伝えする必要があります。ふふふ。

いいえ、sql\DataAdapterを使用してこれをエレガントに行う方法はありません。一連のt-sqlコマンドを使用してADO.NETを介してこれを行うことができます。毎回、ID上書きモード(set identity_insert theTable on)をオンにし、そのテーブルのすべての値を1つ増やしてクエリを実行してから、自動番号上書きモードをオンにする必要があります。ただし、これを外部キーとして使用する他のすべてのテーブルをインクリメントする必要があります。しかし、待ってください、それは悪化します:

  • この間、これらのテーブルに他に何も起こらないため、トランザクションでこれらすべてを行う必要があります。障害が発生した場合は、ロールバックする必要があります。これは、適切なサイズの処理のチャンクである可能性があります。あなたのテーブルはかなりの間ロックされるでしょう。
  • これらのテーブル間に外部キー制約がある場合は、これを行う前にそれらをオフにし、後で再実装する必要があります。
于 2010-01-12T21:37:52.113 に答える
0

主キー値の更新について考え始めた場合は、アラーム ベルが鳴り始めるはずです。簡単に思えるかもしれませんが、解決策というよりもハックに分類します。個人的には、再考して本当の問題に対処しようと思います。今は難しいように思えるかもしれませんが、今後の潜在的な恐ろしい問題を維持して減らす方がはるかに良いでしょう.

于 2010-01-12T21:41:24.517 に答える