tôi đã viết một cái gì đó cho một trong khi trước đây. Bạn có thể phải sửa đổi nó cho nhu cầu của bạn, nhưng ít nhất bạn có một bộ xương.
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
Nguồn
2012-10-01 11:11:18
Bản sao có thể có của [Tạo tập lệnh của Tất cả chỉ mục trong cơ sở dữ liệu] (http://stackoverflow.com/questions/9089700/generate-script-of-all-the-indexes-in-a-database) – bummi