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

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

Summary

この記事は、テーブル デザイナーで変更を保存するときにSQL Server Management Studio (SSMS) に表示される "変更の保存は許可されていません" というエラー メッセージを回避するのに役立ちます。 このエラーは、SSMS でテーブルを削除して再作成する必要があり、[テーブル の再作成を必要とする変更の保存を禁止 する] オプションが有効になっている場合に発生します。 このエラーと、それによって発生するテーブルの再作成を回避するには、テーブル デザイナーの代わりに ALTER TABLE Transact-SQL (T-SQL) ステートメントを使用します。 この記事では、オプションを変更する方法と、オプションをオフにするとリスクが高い理由についても説明します。特に、Change Tracking を使用するテーブルの場合は危険です。

現象: テーブル デザイナーでテーブルの変更を保存するときにエラーが発生する

SQL Server Management StudioでTable Designerを使用してテーブルに変更を加えてからテーブルを保存しようとすると、次のエラー メッセージが表示されることがあります。

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

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

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

原因: SSMS により、テーブルの再作成が必要な変更が防止される

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

メタデータ構造が変わるようにテーブルを変更してからそのテーブルを保存する場合、SSMS では、これらの変更に基づいてテーブルを再作成する必要があります。 テーブルを再作成すると、メタデータが失われ、データが完全に失われる可能性があります。

SSMS の [オプション] ウィンドウの [デザイナー] セクションで [テーブルの再作成を必要とする変更の保存を禁止する] オプションが有効になっている場合、SSMS は保存をブロックし、[現象] セクションに記載されているエラー メッセージが表示されます。 このオプションの詳細については、「オプション ([デザイナー] - [テーブル およびデータベース デザイナー] ページ)」を参照してください。

回避策: テーブル デザイナーの代わりに ALTER TABLE を使用する

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

  1. SQL Server Management Studioで、インスタンスに接続し、テーブルを含むデータベースを選択します。
  2. ツール バーで、 [新しいクエリ] を選択します。
  3. クエリ ウィンドウに T-SQL ステートメントを入力し、[ 実行] を選択します。

ALTERステートメントを実行するには、テーブルに対するALTER TABLE権限が必要です。

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

ALTER TABLE MyTable ALTER COLUMN MyDate datetime NULL;

同じテーブルに NULL 値を受け入れる型の int という名前の新しい列を追加するには、次のステートメントを使用します。

ALTER TABLE MyTable ADD MyNewColumn int NULL;

重要

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

[テーブルの再作成を必要とする変更の保存を禁止する] オプションを変更する方法

テーブルの再作成を必要とする変更の保存を禁止 オプションを選択または解除するには、次の手順に従います。

  1. SQL Server Management Studioを開きます。
  2. [ ツール ] メニューの [ オプション] を選択します。
  3. [オプション] ウィンドウのナビゲーション ウィンドウで、[デザイナー] を選択します。
  4. [ テーブルの再作成が必要な変更を保存しない ] チェック ボックスをオンまたはオフにして、[ OK ] を選択します。

注

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

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

このオプションをオフにするとエラーを回避できますが、変更が失われる可能性もあります。 [ テーブルの再作成を必要とする変更の保存を禁止 する] オプションが有効になっている場合、テーブルを再作成するとメタデータやデータが一般的に失われる可能性があるため、テーブルの再作成を必要とするすべての変更に対してエラーが表示されます。 変更の追跡は、失われる可能性があるメタデータの 1 つの例です。

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

テーブルに対して変更の追跡が有効になっているかどうかを確認する方法

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

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

Change Tracking 機能が有効になっている場合は、T-SQL ステートメントを使用してテーブルのメタデータ構造を変更してください。 変更履歴の記録の有効化と無効化の詳細については、「変更履歴の記録の有効化と無効化」を参照してください。

問題を再現する手順

エラーを再現するには、次の手順に従います。

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