エラー メッセージ "変更の保存が許可されていません" が、SQL Server でテーブルを保存しようとすると表示される

現象
Microsoft SQL Server 2008 で、データ定義言語 (DDL) を使用してテーブルを変更してから、テーブルを保存しようとすると、次のメッセージが表示されることがあります。
変更の保存が許可されていません。行った変更には、次のテーブルを削除して再作成することが必要になります。再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています。
原因
この問題は、[テーブルの再作成を必要とする変更を保存できないようにする] オプションが有効であり、テーブルに以下のいずれかの変更を行った場合に発生します。
  • 列の [Null を許容] 設定を変更する。
  • テーブルで列を並べ替える。
  • 列のデータ型を変更する。
  • 新しい列を追加する。
テーブルのメタデータ構造を変更するようにテーブルを変更し、テーブルを保存した場合、これらの変更内容に基づいてテーブルを再作成する必要があります。これにより、テーブルの再作成時にメタデータが失われ、データが直接失われる場合があります。[SQL Server Management Studio (SSMS) のオプション] ウィンドウの [デザイナー] セクションで [テーブルの再作成を必要とする変更を保存できないようにする] オプションを有効にすると、「現象」に記載されているエラー メッセージが表示されます。
回避策
この問題を回避するには、Transact-SQL ステートメントを使用してテーブルのメタデータ構造を変更します。詳細については、SQL Server Books Online の以下のトピックを参照してください。

http://msdn.microsoft.com/en-us/library/ms190273.aspx

たとえば、MyTable というテーブルで、型 datetime の MyDate 列を変更して NULL 値を使用できるようにするには、次のステートメントを使用する方法があります。

alter table MyTable alter column MyDate7 datetime NULL

重要 [テーブルの再作成を必要とする変更を保存できないようにする] オプションを無効にすることでこの問題を回避することはお勧めしません。このオプションを無効にするリスクの詳細については、「詳細」を参照してください。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細
[テーブルの再作成を必要とする変更を保存できないようにする] オプションを変更するには、以下の手順を実行します。
  1. SQL Server Management Studio (SSMS) を開きます。
  2. [ツール] メニューの [オプション] をクリックします。
  3. [オプション] ウィンドウのナビゲーション ウィンドウで、[デザイナー] をクリックします。
  4. [テーブルの再作成を必要とする変更を保存できないようにする] チェック ボックスをオンまたはオフにして、[OK] をクリックします。
注: このオプションを無効にすると、ユーザーが行った変更によりテーブルのメタデータ構造が変更されたテーブルを保存しても、警告は表示されません。この場合、テーブルを保存するときにデータが失われる可能性があります。

[テーブルの再作成を必要とする変更を保存できないようにする] オプションを無効にするリスク

このオプションを無効にすると、テーブルの再作成を回避するのに役立ちますが、変更内容が失われる可能性も生じます。たとえば、SQL Server 2008 で変更の監視機能を有効にしてテーブルへの変更を追跡する場合を考えます。テーブルが再作成される原因になる操作を実行すると、「現象」に記載されているエラー メッセージが表示されます。ただし、このオプションを無効にしていると、テーブルが再作成される際に既存の変更の追跡情報が削除されます。そのため、このオプションを無効にしてこの問題を回避することはお勧めしません。

テーブルで変更の追跡機能が有効であるかどうかを確認するには、次の手順を実行します。
  1. SQL Server Management Studio の [オブジェクト エクスプローラー] でテーブルを参照します。
  2. テーブルを右クリックし、[プロパティ] をクリックします。
  3. [テーブルのプロパティ] ダイアログ ボックスで、[変更の追跡] をクリックします。
[変更の追跡] の値が "True" である場合、テーブルに対してこのオプションが有効になってます。値が "False" である場合、このオプションは無効です。

変更の追跡機能が有効である場合、テーブルのメタデータ構造を変更するには Transact-SQL ステートメントを使用します。

問題の再現手順

  1. SQL Server Management Studio のテーブル デザイナー ツールで、主キーが含まれるテーブルを作成します。
  2. このテーブルが含まれるデータベースを右クリックし、[プロパティ] をクリックします。
  3. [データベースのプロパティ] ダイアログ ボックスで、[変更の追跡] をクリックします。
  4. [変更の追跡] の値を "True" に設定し、[OK] をクリックします。
  5. テーブルを右クリックし、[プロパティ] をクリックします。
  6. [テーブルのプロパティ] ダイアログ ボックスで、[変更の追跡] をクリックします。
  7. [変更の追跡] の値を "True" に設定し、[OK] をクリックします。
  8. [ツール] メニューの [オプション] をクリックします。
  9. [オプション] ダイアログ ボックスの [デザイナー] をクリックします。
  10. [テーブルの再作成を必要とする変更を保存できないようにする] チェック ボックスをオンにして、[OK] をクリックします。
  11. テーブル デザイナー ツールで、既存の列に対する [Null を許容] 設定を変更します。
  12. テーブルへの変更を保存してみます。
sqlsvr12 sqlsvr2008 "SQL Server 2008 Tools" SQL2008RelNoteTools "change tracking"
プロパティ

文書番号:956176 - 最終更新日: 07/03/2012 15:44:00 - リビジョン: 4.0

Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Express with Advanced Services, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Express with Advanced Services, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Standard Edition for Small Business, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web, SQL Server 2012 Enterprise Core

  • kbsqlsetup sql2008relnotetools sql2008relnote kbprb KB956176
フィードバック