SSMS でテーブル定義変更した際に「変更の保存が許可されていません」というエラー メッセージが表示される
SQL Server Management Studio (SSMS)でテーブルに列を追加したりデータ型(タイプ)変更やNULL許可などを変更した際に、「変更の保存が許可されていません」とエラーメッセージが表示され変更できない問題の回避策を記載
原因は
SQL Server Management Studio で [テーブルの再作成が必要になる変更を保存しない] オプションが既定で有効になっているために発生します。
テーブルのメタデータ構造を変更する際に、テーブルの再作成する必要がありますが、これによりメタデータが失われテーブルの再作成中にデータが失われる可能性があるので、[SQL Server Management Studio (SSMS) ]では標準で、警告メッセージを表示しています。
現象は以下の変更をテーブルで1つ以上行った場合に発生します。
- 列の「NULLを許可する」設定を変更します。
- テーブル内の列の順序を変更する
- 列データ型を変更する
- 新しい列を追加する
- テーブルの「filegroup」またはその「text/image」データを変更する
回避策
安全に問題を回避するためには、「ALTER TABLE Transact-SQL ステートメント」を使用して、テーブルのメタデータ構造を行います。
SQLのようにNULLを許可する場合などは、以下のようなメタデータ構造を変更するSQLを組み立てて発行するのがより安全です。
alter table テーブル名 alter column カラム名 datetime NULL
回避策2
マイクロソフトでは、回避策としては推奨はしていませんが、例えばシステム開発時やテスト等、システムが本稼働していないようなシーンでは、SQL Server Management Studio (SSMS) オプション] を変更したほうがGUIで簡単に定義変更ができますので利便性が高いです。
1,「メニュー」→「ツール」をクリックします。オプションを選択します。
2,[オプション] ウィンドウのナビゲーション ウィンドウで、[テーブルデザイナー及びデータベースデザイナー] をクリックします。
3,「テーブルの再作成を必要とする変更を保存できないようにする」チェックをオフにする。
マイクロソフトの正式見解としては、[テーブルの再作成が必要になる変更を保存しない] オプションのオフは推奨していません。
現象
テーブル定義を変更するテーブルを右クリックします。次にデザインをクリックします。
データ型を変更します。
テーブル定義を変更したタブを×をクリックします。以下の項目への変更保存しますかと聞かれますので、はいをクリックします。
「変更の保存が許可されていません。」行った変更には、次のテーブルを削除して再作成することが必要になります。再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています。とメッセージが表示されます。