web-dev-qa-db-ja.com

SQL Server:一意のインデックスに列を追加するためのインデックス変更ステートメントを作成する方法

UNIQUE, NON CLUSTEREDインデックスに現在4列を使用しているテーブルのインデックス。

このインデックスに別の列を追加するだけの変更スクリプトを作成したいと思います。新しい列タイプはvarcharです。

データベースはSQL Server 2005です。

前もって感謝します。

48
JL.

インデックスを変更することはできません-できることは

  1. 古いインデックスを削除します(DROP INDEX (indexname) ON (tablename)
  2. 追加の列を含む新しいインデックスを再作成します。

      CREATE UNIQUE NONCLUSTERED INDEX (indexname)
      ON dbo.YourTableName(columns to include)
    

SQL ServerのALTER INDEXステートメントは、既存のインデックスの特定のプロパティ(ストレージプロパティなど)を変更するために使用できますが、インデックスを構成する列を変更することはできません。

76
marc_s

インデックスに追加する新しい列が列のリストの最後にある場合-つまり、古いインデックスの列リストが新しいインデックスの列リストの接頭辞である場合-ソートされる行古い列は新しい列でソートされます。 Sybase SQL Serverおよびおそらく古いバージョンのMicrosoft SQL Serverでは、with sorted_dataオプションにより、行がすでにソートされていることを宣言できます。しかし、MSSQL 2008 R2では効果がないようです。オプションは受け入れられますが、黙って無視されます。いずれにせよ、このオプションはクラスター化インデックスでほとんど役に立ちました。

その他の言及with drop_existing、これは素晴らしいサウンドですが、MSSQLのより高価なバージョン専用です。

3
Ed Avis