[SQL Azure] プライマリ キーを削除できない
こんにちは、Windows Azure サポートチームです。
SQL Azure に関するお問い合わせの中で、よくあるお問い合わせの一つを紹介したいと思います。
[質問]
SQL Server Management Studio から SQL Azure 上のデータベースに接続し、該当テーブル上のプライマリ キーを変更するため、一旦 プライマリ キーを削除しようとしたところ、エラー 40054 “Tables without a clustered index are not supported in this version of SQL Server.” というエラーが発生し、プライマリ キーを削除することができないのは何故?
エラー 40054 “Tables without a clustered index are not supported in this version of SQL Server.” というエラーが発生し、プライマリ キーの削除に失敗しました。
[解決策]
プライマリ キーの存在するテーブルを一旦削除後、テーブル作成スクリプト内でプライマリキーを変更し、テーブルの再作成を実施します。
SQL Azure では、テーブル上に クラスタ化インデックス が必須となっております。また、テーブル作成スクリプト内で “PRIMARY KEY CLUSTERD” (もしくは “PRIMARY KEY”) と指定した場合、クラスタ化インデックスが作成された後、プライマリ制約が該当の列に付与されます。
今回の事例の場合、プライマリ キーの削除と同時に、クラスタ化インデックスの削除が行われますが、SQL Azure では、テーブル上に クラスタ化インデックス が必須であるため、削除することができず、エラー 40054 が発生します。
テーブル tab1作成スクリプト内で、プライマリ キーを C1 列 から C2 列に変更後、テーブル tab1 作成スクリプトを実行することにより、プライマリ キーを変更することができます。
なお、該当のテーブルにデータが挿入されていない場合 (一度もデータがインサートされていない、もしくは TRANCATE TABLE コマンドが実行された後) は、プライマリ キー (クラスタ化インデックス)を削除することが可能となります。
※ 本Blogの内容は、 2011年12月現在の内容となっております。
--
Support Engineer
Nobushiro Takahara