[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.” というエラーが発生し、プライマリ キーを削除することができないのは何故?

image

エラー 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 が発生します。

 

image

 

テーブル tab1作成スクリプト内で、プライマリ キーを C1 列 から C2 列に変更後、テーブル tab1 作成スクリプトを実行することにより、プライマリ キーを変更することができます。

なお、該当のテーブルにデータが挿入されていない場合 (一度もデータがインサートされていない、もしくは TRANCATE TABLE コマンドが実行された後) は、プライマリ キー (クラスタ化インデックス)を削除することが可能となります。

 

image

※ 本Blogの内容は、 2011年12月現在の内容となっております。

--
Support Engineer
Nobushiro Takahara