クラスター化インデックスが作成されていないテーブルを一覧する(SQL Azure)
ネタ元:SQL Azure Team Blog: Finding Your Clustered Indexes
http://blogs.msdn.com/b/sqlazure/archive/2010/06/02/10018878.aspx
SQL Azure では、クラスター化インデックスが必須なので、クラスター化インデックスが設定されていないテーブルを一覧するスクリプトです。
USE データベース名 SELECT DISTINCT OBJECT_NAME(object_id) FROM sys.indexes WHERE index_id = 0 AND OBJECTPROPERTY(object_id, 'IsUserTable') = 1
indexes システム ビューは、データベース内のすべてのインデックス情報を参照できるビューです。WHERE 句の「index_id = 0」によって、ヒープ(クラスター化インデックスが作成されていないテーブルのデータ格納状態。クラスター化インデックスが作成されている場合は index_id = 1 となる)を取得できます。
object_id には、テーブルのオブジェクトID が格納されているので、OBJECT_NAME 関数でテーブル名を取得、OBJECTPROPERTY 関数で IsUserTable(ユーザー テーブル)かどうかをチェックしています(1 ならユーザー テーブル、0 ならシステム テーブル)。