2011-09-16 7 views
0

私はEmpTableから単純な削除を行い、EmpTableに挿入してください。Select * xxEmpTablemmddyyy
しかし、EmpTableはあまりにも多くのテーブルによって参照されています。 PKとFKスルー多くのテーブルで参照されている、バックアップ表から別の表に行をリストアします。

  • 従業員のテーブル:

    には、以下の業務フローを考えてみましょう。

  • 従業員表上の任意の更新は(たとえば、従業員名の変更)は、既存の行のeffective_end_dateを更新し、新しいeffective_start_dateで新しい行を挿入ます

  • 情報を作成/ employeeテーブルに更新され、多くのソースから来ていますファイル(FoxProのテーブル、CSVファイルなど)

  • ソースファイルは、その後ステージングテーブルにロードされているサイード
  • は、いくつかの検証
  • ストアドプロシージャspTransfer行います - バックアップ元をistingテーブル(EmpTableからxxEmpTablemmddyyyyに*を選択) - Employeeテーブルへの更新/挿入。

シナリオを検討してください。

  • ユーザーは、ステージング表にソースファイルをロードし、いくつかの検証もの
  • は、ユーザーがソースファイルが誤っていることに気づい
  • spTransfer
  • 手順を実行しました。

ここで、xxEmpTablemmddyyyyに基づいてEmpTableのステータスを戻す必要があります。

私はEmpTableから単純な削除を行い、EmpTable Select * xxEmpTablemmddyyyに挿入したいと思っています しかし、EmpTableはあまりにも多くのテーブルによって参照されています。

どのような提案も高く評価されています。

おかげで、
エルマー

+0

外部キー関係のためにEmpTableから削除できない場合は、間違ったデータを他のテーブルからも削除する必要がありますか?つまり、悪いデータをEmpTableから戻すことはできませんが、すべてのテーブルから取り出すことはできません。 – Wil

答えて

0

SO要件が削除を逆にして挿入することができることですか?

あなたがアイデンティティのフィールドを持っている場合は、削除する行を選択し、それらを挿入

select * into MyEMpTable_Archived from MyEMpTable 
where 1=2; 

にIDENTITY_INSERTを挿入する必要がありますが、アーカイブされたテーブルに削除された行を保存するので、アーカイブされたテーブルを作成しますアーカイブテーブルに追加します。

ターゲット表から行を削除します。

ステージテーブルから新しい行を読み込みます。

操作を元に戻したい場合に備えて、新しく挿入した行を追跡する必要があります。したがって、負荷の前に最大値を記録し、負荷の後に再度記録します。

新しいデータがロードされた後にユーザーがコールすると、新しく挿入された行を削除し、削除された行を戻すことができます。

これは多くの作業です。

バックアップが頻繁に行われていることを確認して、SQL仮想復元または後で実行する1つのテーブルのみを非実稼働環境に取得して、必要な行をテーブルに戻すことができるツールに投資します。

これが頻繁に発生する場合は、ターゲットテーブルから削除してビットフィールドを削除して、非アクティブまたは削除としてマークしないようにしてください。

関連する問題