2012-10-01 9 views
5

Hat jemand ein Skript zum Auflisten von CREATE INDEX-Anweisungen für alle vorhandenen Indizes in einer SQL Server-Datenbank?Erzeuge CREATE INDEX-Anweisungen in SQL Server

Dieser Thread List of all index & index columns in SQL Server DB hat gute Tipps, wie Sie sie finden. Aber ein Skript zum Generieren der CREATE INDEX Anweisungen wäre großartig. Manchmal kommen wir in eine Situation ohne adäquate Daten, oder Indizes wurden ad hoc im Laufe der Zeit ohne Dokumentation hinzugefügt, so dass die create-Anweisungen fehlen. Wie in einer Situation, in der ich mich gerade befinde.

Danke.

+1

Mögliches Duplikat von [Skript aller Indizes in einer Datenbank generieren] (http://stackoverflow.com/questions/9089700/generate-script-of-all-the-indexes-in-a-database) – bummi

Antwort

10

Verwenden Generieren von Skripts von SQL Management Studio und wählen Sie die „Script Indizes“ Optionen (unter Advanced Scripting-Optionen)

+0

Dies ist hat perfekt funktioniert. Vielen Dank! (Und dank den anderen auch, schätze ich Ihre Hilfe). – royappa

+3

Ich könnte das Offensichtliche sagen, aber um dorthin zu gelangen, klicken Sie mit der rechten Maustaste auf die Datenbank -> Aufgaben -> Skripte erstellen ... –

3

Ich schrieb etwas für die vor einer Weile. Möglicherweise müssen Sie es für Ihre Bedürfnisse ändern, aber zumindest haben Sie ein Skelett.

if exists (select 1 from information_schema.routines where routine_name = 'Script_CreateIndex') 
    drop proc Script_CreateIndex 
go 

create proc Script_CreateIndex (
    @TableName varchar(124) 
) 
as 
begin 
    if not exists (select 1 from sys.indexes where object_name(object_id) = @TableName and type_desc in ('CLUSTERED', 'NONCLUSTERED')) 
     return 

    declare @IndexList table (
     Id int identity, 
     IndexName varchar(124), 
     IndexDescription varchar(max), 
     IndexKeys varchar(max) 
    ) 

    insert @IndexList(IndexName, IndexDescription, IndexKeys) 
     exec sp_helpindex @TableName 

    if (select count(*) from @IndexList) > 0 
    begin 
     select '-- Creating indexes for table ' + @TableName 

     while exists (select 1 from @IndexList) 
     begin 
      declare @Id int, @IndexName varchar(124), @IndexDescription varchar(max), @IndexKeys varchar(max) 
      select top 1 @Id = Id, @IndexName = IndexName, @IndexDescription = IndexDescription, @IndexKeys = IndexKeys from @IndexList order by Id 
      delete from @IndexList where Id = @Id 

      declare @Clustered varchar(10), @Unique varchar(7) 

      select @Clustered = case when patindex('%nonclustered%', @IndexDescription) > 0 then '' else ' clustered ' end 
      select @Unique = case when patindex('%unique%', @IndexDescription) > 0 then ' unique ' else '' end 

      select 'if not exists (select 1 from sys.indexes where name = ''' + @IndexName + ''')' 
      select 'begin' 
      select char(9) + 'create' + @Unique + @Clustered + ' index [' + @IndexName + '] on [' + @TableName + '](' + @IndexKeys + ')' 
      select char(9) + 'select ''Index ' + @IndexName + ' created.''' 
      select 'end' 
      select 'go' 
     end 

     select '' 
     select '' 
    end 
end 
go 

grant exec on Script_CreateIndex to public 
select 'Script_CreateIndex compiled.' 'Job' 
go 
1

Sie können es durch Tabelle Basis auf einem Tisch tun, indem Sie die „Objekt-Explorer“ Fenster mit

Gehen Sie zu den Indizes in Management Studio Ordner, markieren Sie den Ordner dann die Scheibe Objekt-Explorer öffnen

Sie können dann alle Indizes für diese Tabelle "verschieben", wenn Sie mit der rechten Maustaste auf das Skript "CREATE TO" klicken, wird ein Skript mit allen relevanten Indizes für Sie erstellt.