1. ホーム
  2. sql-server

[解決済み】「テーブルの再作成を必要とする変更を保存しない」悪影響について

2022-04-03 15:06:43

質問内容

前文

今日、SQL Server 2008のカラムを修正して、データ型をcurrency(18,0)のようなものから(19,2)に変更しました。

SQL Serverから "あなたが行った変更には、次のテーブルを削除して再作成する必要があります"というエラーが表示されました。

スクラムを組んで回答する前に、以下をお読みください。

にオプションがあることは既に知っています。 ツール ► オプション ► デザイナー ► テーブルとデータベースデザイナー ► チェックボックスをオフにする "テーブルの再作成を必要とする変更を保存しないようにします。 ...そこで しない と答えてください。

実際の質問

私の実際の質問は、次のような別のものです。

このようなことをすると、何か悪影響/欠点が考えられますか?

このボックスのチェックを外すと、実際にテーブルは自動的に削除され、再作成されるのでしょうか?

その場合、テーブル コピーはソース テーブルの 100% 正確なレプリカですか?

解決方法は?

テーブルの削除と再作成は、SQL Server の Management Studio がその方法を知るためにプログラムされた唯一の方法である場合にのみ行われます。

確かに、必要ない時にそうする場合もありますが、Management Studioで行った編集が、そのようなケースもあるでしょう。 ではない ドロップして再作成する必要がないからです。

問題は、すべてのケースを列挙して、どちらに該当するかを判断するのが、かなり面倒だということです。

そのため、私が好きなのは ALTER TABLE 何が起こっているのかを隠す(そして率直に言ってバグがある)ビジュアルデザイナーではなく、クエリウィンドウの中で、私は何が起こるのかを正確に知っており、唯一の可能性がテーブルをドロップして再作成すること(SSMSがあなたにそれを行う頻度よりも少ない数です)であるケースを準備することができます。

<ブロッククオート

このようなことをすると、何か悪影響/欠点がある可能性はありますか?

もちろん、テーブル全体を再構築することなく、自分でスクリプトを組んで変更できるのであれば、その方が良いでしょう。テーブルが10TBで、データベースのログが多く(同期AG、変更追跡、レプリケーション、トリガーの書き方がまずいと思います)、テーブルへのアクセスが多い場合について考えてみましょう - これは災害の可能性を秘めていると言えます。もし、変更がONLINEヒントを適用したり、カラムを追加したり、GUIで行うオール・オア・ナッシングではなく、バッチでデータをコピーするようなものであれば、こちらの方がよいでしょう。

<ブロッククオート

このボックスのチェックを外したとき、実際にテーブルは自動的に削除され、再作成されるのでしょうか?

それは かもしれない . シナリオのリストはたくさんあり、結果はSSMSのバージョン、SQL Serverのバージョン、そして時にはエディションに依存します。チェックボックスにチェックを入れて、変更を適用してみることで確認できます。 まずデータベースの意味のないコピーで しかし、とんがったGUIではなく、実際のALTER TABLEスクリプトを使用するのがIMHOの方法です。

<ブロッククオート

その場合、テーブルコピーはソーステーブルの100%正確な複製ですか?

はい、SSMSがテーブルを再構築しなければならない場合、それが終わった後は100%正確なレプリカになります(もちろん、変更を除いて)が、それは次の水曜日になるかもしれません。このプロセスでは、新しいバージョンのテーブルを作成し、すべてのデータをそこにコピーし、古いテーブルを削除して新しいテーブルの名前を変更します。