SQL Azureのテーブルにデータを追加するには、クラスター化インデックスが必要です。クラスター化インデックスが無いテーブルにデータを追加しようとすると、エラーが発生しデータを追加することができません。SQL Serverには、そのような制限はありません。
なぜ、SQL Azureには、そのような制限があるのでしょうか。
SQL Azure と Cosmos DB をメインにWindows Azureの情報を発信
SQL Azureのテーブルにデータを追加するには、クラスター化インデックスが必要です。クラスター化インデックスが無いテーブルにデータを追加しようとすると、エラーが発生しデータを追加することができません。SQL Serverには、そのような制限はありません。
なぜ、SQL Azureには、そのような制限があるのでしょうか。
情報源:Clustered Indexes and SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。
SQL Azureの基本に集中した新しいシリーズ連載を始め、SQL Azureを使用したアプリケーションを開発したり、マイグレーションする為の詳細な情報を提供します。
SQL Serverとは違って、SQL Azureは全てのテーブルにクラスターインデックスが必要です。クラスターインデックスは通常、プライマリキーに指定した列に作成されます。クラスタインデックスは、キーの値に応じて行を並べ替え格納します。一つの条件に従って行を並べ替えなければならないので、クラスターインデックスは、一つのテーブルに一つしか作成できません。
クラスターインデックスを持つシンプルなテーブルの例
CREATE TABLE Source (Id int NOT NULL IDENTITY, [Name] nvarchar(max), CONSTRAINT [PK_Source] PRIMARY KEY CLUSTERED ( [Id] ASC ))
SQL Azureに、クラスターインデックスの無いテーブルを作成することができますが、そのテーブルにデータを追加しようとすると次のエラーが発生します。
Msg 40054, Level 16, State 1, Line 2
Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.
SQL Azureはヒープテーブルを許可していません。ヒープテーブルの定義は、クラスタインデックスの無いテーブルのことです。SQL Serverのインデックスに関する追加情報は、MSDN上のドキュメントを確認してください。
データベース上の全ての通常のテーブルは、このルールに従いますが、一時テーブルの場合はルールに当てはまりません。SQL Serverで一時テーブルを作成したのと同様に、SQL Azureにも一時テーブルを作成できます。
CREATE TABLE #Destination (Id int NOT NULL, [Name] nvarchar(max)) -- Do Something DROP TABLE #Destination