SQL Azure Team Blog

SQL Azureのテーブルにデータを追加するには、クラスター化インデックスが必要です。クラスター化インデックスが無いテーブルにデータを追加しようとすると、エラーが発生しデータを追加することができません。SQL Serverには、そのような制限はありません。

なぜ、SQL Azureには、そのような制限があるのでしょうか。

SQL Azure Team Blog

情報源: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