SSMS で「変更の保存が許可されていません」というエラー メッセージが表示される

この記事は、SQL Server Management Studio (SSMS) にテーブルを保存しようとしたときにエラー メッセージが表示される問題を回避するのに役立ちます。

元の製品バージョン: SQL Server
元の KB 番号: 956176

現象

SQL Server Management Studio でデザイナーを使用してテーブルの変更を行った後にテーブルを保存しようとすると、次のエラー メッセージが表示される場合があります。

変更の保存が許可されていません。 変更を行った場合は、次のテーブルを削除して再作成する必要があります。 再作成できないテーブルに変更を行ったか、テーブルの再作成が必要な変更を、保存できないようにするオプションが有効になっています。

この問題は、テーブルに次の 1 つ以上の変更を行った場合に発生します。

  • 列の [Null の許可] 設定を変更します。
  • テーブル内の列の順序を変更する。
  • 列データ型を変更する。
  • 新しい列を追加する。
  • テーブルの filegroup またはその text/image データを変更する。

原因

この問題は、SQL Server Management Studio で [テーブルの再作成が必要になる変更を保存しない] オプションが既定で有効になっているために発生します。

テーブルのメタデータ構造を変更するようにテーブルを変更してからテーブルを保存する場合は、これらの変更に基づいてテーブルを再作成する必要があります。 これにより、メタデータが失われ、テーブルの再作成中にデータが直接失われる場合があります。 [SQL Server Management Studio (SSMS) オプション] ウィンドウの [デザイナー] セクションで [テーブルの再作成が必要になる変更を保存しない] オプションを有効にすると、「現象」セクションに記載されているエラー メッセージが表示されます。

回避策

この問題を回避するには、ALTER TABLE Transact-SQL ステートメントを使用して、テーブルのメタデータ構造の変更を行います。

たとえば、MyTable というテーブルで datetime 型の MyDate 列を変更して、NULL 値を受け入れるには、次を使用できます。

alter table MyTable alter column MyDate7 datetime NULL

重要

[テーブルの再作成が必要になる変更を保存しない] オプションをオフにして、この問題を回避しないことを強くお勧めします。 このオプションをオフにした場合のリスクの詳細については、「詳細情報」セクションを参照してください。

詳細

[テーブルの再作成が必要になる変更を保存しない] オプションを変更するには、次の手順を実行します。

  1. SQL Server Management Studio を開きます。

  2. [ツール] メニューの [オプション] をクリックします。

  3. [オプション] ウィンドウのナビゲーション ウィンドウで、[デザイナー] をクリックします。

  4. [テーブルの再作成が必要になる変更を保存しない] チェック ボックスをオンまたはオフにして、[OK] をクリックします。

注:

このオプションを無効にすると、テーブルを保存するときに、行った変更によってテーブルのメタデータ構造が変更されたという警告は表示されません。 この場合、テーブルを保存するときにデータが失われる場合があります。

[テーブルの再作成が必要になる変更を保存しない] オプションをオフにした場合のリスク

このオプションをオフにすると、テーブルの再作成を回避できますが、変更が失われる可能性もあります。 たとえば、SQL Server の変更追跡機能を有効にしてテーブルへの変更を追跡するとします。 テーブルを再作成する操作を実行すると、「現象」セクションに記載されているエラー メッセージが表示されます。 ただし、このオプションをオフにすると、テーブルが再作成されるときに既存の変更追跡情報が削除されます。 したがって、このオプションをオフにしてこの問題を回避しないことをお勧めします。

テーブルで変更追跡機能が有効になっているかどうかを確認するには、次の手順を実行します。

  1. SQL Server Management Studio で、オブジェクト エクスプローラー内のテーブルを見つけます。
  2. テーブルを右クリックし、[プロパティ] をクリックします。
  3. [テーブルのプロパティ] ダイアログ ボックスで、[変更の追跡] をクリックします。 [変更の追跡] 項目の値が True の場合、このオプションはテーブルに対して有効になります。 値が False の場合、このオプションは無効になります。

Change Tracking 機能が有効になっている場合は、Transact-SQL ステートメントを使用してテーブルのメタデータ構造を変更します。

問題の再現手順

  1. SQL Server Management Studio のテーブル デザイナー ツールで主キーを含むテーブルを作成します。
  2. このテーブルを含むデータベースを右クリックし、[プロパティ] をクリックします。
  3. [データベース プロパティ] ダイアログ ボックスで、[変更追跡] をクリックします。
  4. [変更追跡] 項目の値を True に設定し、[OK] をクリックします。
  5. テーブルを右クリックし、[プロパティ] をクリックします。
  6. [テーブルのプロパティ] ダイアログ ボックスで、[変更追跡] をクリックします。
  7. [変更追跡] 項目の値を True に設定し、[OK] をクリックします。
  8. [ツール] メニューの [オプション] をクリックします。
  9. [オプション] ダイアログ ボックスで、[デザイナー] をクリックします。
  10. [テーブルの再作成が必要になる変更を保存しない] チェック ボックスをオンにして、[OK] をクリックします。
  11. テーブル デザイナー ツールで、既存の列の [Null を許可] 設定を変更します。
  12. 変更をテーブルに保存してください。