2012-10-01 27 views
5

¿Alguien tiene una secuencia de comandos para listar las instrucciones CREATE INDEX para todos los índices existentes en una base de datos de SQL Server?Generar instrucciones CREATE INDEX en SQL Server

Este hilo List of all index & index columns in SQL Server DB tiene excelentes consejos sobre cómo encontrarlos. Pero una secuencia de comandos para generar las declaraciones CREATE INDEX sería genial. A veces entramos en una situación sin datos adecuados, o se han agregado índices de manera ad-hoc en el tiempo sin documentación, por lo que faltan las instrucciones de creación. Como en una situación en la que me encuentro ahora mismo.

Gracias.

+1

Posible duplicado de [Generar script de Todos los índices en una base de datos] (http://stackoverflow.com/questions/9089700/generate-script-of-all-the-indexes-in-a-database) – bummi

Respuesta

10

Uso generar scripts de SQL Server Management Studio y elija las opciones "Índices de escritura" (en las opciones avanzadas de scripting)

+0

This funcionó perfectamente ¡Gracias! (Y gracias a los demás también, agradezco su ayuda). – royappa

+3

Podría estar diciendo lo obvio, pero para llegar allí, haga clic con el botón derecho en la base de datos -> Tareas -> Generar scripts ... –

3

escribí algo para que un tiempo atrás. Puede que tenga que modificarlo para sus necesidades, pero al menos tiene un esqueleto.

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

Puede hacerlo en una mesa de base tabla utilizando la ventana "Explorador de objetos"

Ir a los Índices de carpeta en el estudio de gestión, resalte la carpeta a continuación, abra el panel de exploración de objetos

Puede seleccionar "cambiar" todos los índices en esa tabla; si hace clic con el botón derecho en el script "CREAR A", creará un script con todos los índices relevantes para usted.

Cuestiones relacionadas