現在、 と という名前の列をいくつか使用しているテーブルがありDateFrom
ますDateTo
。NewDate
それらを単一の列に置き換えようとしており、既存の行に からの値が入力されていますDateFrom
。
変更が失敗した場合、中間のテーブルが必要ないため、元に戻したいため、適切なエラー/トランザクション処理が必要です。
いろいろやってみましたが、うまくいきません。私はこれを経験していないので、どんな助けも大歓迎です。
私はから始めました
BEGIN TRAN
ALTER TABLE TableName
ADD NewDate DATETIME
IF @@ERROR = 0 AND @@TRANCOUNT = 1
UPDATE TableName
SET NewDate = ValidFrom
....
NewDate
現在テーブルの列ではないため、これはすぐに失敗します。いいので、そこに a を追加GO
します。これにより、2 つのバッチに分割され、実行されるようになりましたが、@@ERROR
チェックが無意味になります。また、ローカル変数も後で失われるため、使用できませんGO
。TRY...CATCH
理想的には、各ステートメントの後にエラーをチェックしないようにするために a を使用したいのですがGO
、1 つのバッチである必要があるため、a を使用することはできません。
私が見つけた記事の中で、この状況について話しているものはありません (エラー処理 with GO
)。質問は次のとおりです。列を追加および更新するときに探しているエラー処理のあるトランザクション アプローチを取得する方法はありますGO
か (どこかで必要になるようです)。
それとも、何か問題が発生した場合に元のテーブルにロールバックする機能なしで、いくつかのバッチでそれを行うことで解決する必要がありますか?