webentwicklung-frage-antwort-db.com.de

SQL Server: Wie schreibe ich eine alter index-Anweisung, um dem eindeutigen Index eine Spalte hinzuzufügen?

Ich habe ein UNIQUE, NON CLUSTERED Index für eine Tabelle, die derzeit 4 Spalten für den Index verwendet.

Ich möchte ein Änderungsskript erstellen, das diesem Index lediglich eine weitere Spalte hinzufügen kann. Der neue Spaltentyp ist varchar.

Die Datenbank ist SQL Server 2005.

Danke im Voraus.

48
JL.

Sie können einen Index nicht ändern - alles, was Sie tun können, ist

  1. lösche den alten Index (DROP INDEX (indexname) ON (tablename))
  2. erstellen Sie den neuen Index mit der zusätzlichen Spalte neu:

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

Das ALTER INDEX -Anweisung in SQL Server ist verfügbar, um bestimmte Eigenschaften (Speichereigenschaften usw.) eines vorhandenen Index zu ändern, lässt jedoch keine Änderungen an den Spalten zu, aus denen der Index besteht.

76
marc_s

Befindet sich die neue Spalte, die Sie zum Index hinzufügen, am Ende der Spaltenliste, dh wenn die Spaltenliste des alten Index ein Präfix der Spaltenliste des neuen Index ist, werden die Zeilen sortiert nach Die alten Spalten werden weiterhin nach den neuen Spalten sortiert. In Sybase SQL Server und möglicherweise älteren Versionen von Microsoft SQL Server gab es ein with sorted_data Option, mit der Sie deklarieren können, dass die Zeilen bereits sortiert wurden. In MSSQL 2008 R2 scheint dies jedoch keine Auswirkungen zu haben. Die Option wird akzeptiert, aber unbemerkt ignoriert. In jedem Fall denke ich, dass die Option vor allem bei Clustered-Indizes nützlich war.

Andere erwähnten with drop_existing, was sich gut anhört, aber nur für teurere Versionen von MSSQL gilt.

3
Ed Avis