フィルター処理された非クラスター化インデックスを作成しようとしています。Indexes
GUIで、インデックスが必要なテーブルのフォルダーを右クリックします。インデックスを適用する列を追加し、フィルター ページをクリックして次のステートメントを追加しますWHERE eMail IS NOT NULL
。[OK] をクリックすると、次のエラーが表示されます。
インデックス 'fix_Email' の作成に失敗しました。(Microsoft.SqlServer.Smo)
キーワード 'WHERE' 付近の構文が正しくありません。
キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces 句、または変更追跡コンテキスト句である場合、前のステートメントはセミコロンで終了する必要があります。(Microsoft SQL Server、エラー: 156)
これは、SQL Server 2008 の管理に関する本から直接引用したものです。SQL 2012 Express をインストールして、2 つの違いを確認しました。前の例はすべて機能し、クラスター化インデックス、非クラスター化インデックス、およびカバリング インデックスを作成しました。これは本の問題ですか、SQL Server 2012 の問題ですか、それとも Express エディションの問題ですか? ステートメントの最後にあるエラー メッセージで示唆されているように、セミコロンを配置しようとしましたWHERE
が、何もしませんでした。
クエリ ウィンドウで次のコードを使用して、インデックスを作成できました。
CREATE NONCLUSTERED INDEX fix_Prices
ON dbo.Customers (eMail)
WHERE eMail IS NOT NULL;
これは機能するのに、Management Studio GUI を使用しないのはなぜですか?