2017-11-27 5 views
-2

こんにちは私は、SQL Serverでテーブルのロールバックコピーを作成する方法はありますか?または更新ステートメント私はその挿入または更新ステートメントの前だったように私のデータを回復したいと思います。テーブルのロールバックコピーを作成する方法を誤って挿入または更新する場合

+0

なぜあなたは正しいスクリプトを得るまでロールバックしたトランザクションの内部でスクリプトを置きますか?実際には、テーブル全体のコピーを作成する必要はありません。 –

+0

私は自分のスクリプトをトランザクション内に置いていますが、正常に動作していますが、安全上の理由から私は自分のテーブルのコピーが必要です。 – deep

+1

ロールバックは安全ネットです。テーブルのコピーを作成することに失敗した場合は、SELECT INTOを参照してください。 –

答えて

0
SELECT * 
    INTO myBackupTableName 
    FROM Yourtable 

テーブルのバックアップを作成します。

0

本番環境と作業負荷について議論していると仮定します。この質問/要件について考えると、ロールバックが最善の答えだと強く思います。すでに作られた提案をまとめる

は、バックアップテーブルを作成するに選択するには、テーブルのコピーを作成しますが、あなたはそれに戻す場合は、潜在的に他のユーザーまたはバッチからのデータを失うことになります。

select文またはupdate文のinto句を使用すると、変更された行は取得されますが、元の値は取得されません。

もう1つの答えは、監査テーブルを作成し、トリガーを使用してそれを設定することです。監査テーブルには、バッチに関するロールバックを識別するための十分な詳細が含まれている必要があります。これはかなりウサギの穴に終わる可能性があります。トリガをベーステーブルと監査テーブルに設定したら、この監査テーブルを使用してバッチを元に戻すコードを作成する必要があります。トリガーはパフォーマンス上の問題となり、十分な他のユーザーから十分な変更があった場合でも、他のユーザーの作業を失うことなくバッチを元に戻すことはできません。

更新プログラムと検証コードを同じproc内にラップすることができます。検証が失敗した場合、変更内容のみがロールバックされます。

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-transaction-transact-sql

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/rollback-transaction-transact-sql

関連する問題