2012-10-01 77 views
5

Có ai có một tập lệnh để liệt kê các câu lệnh CREATE INDEX cho tất cả các chỉ mục hiện có trong cơ sở dữ liệu SQL Server không?Tạo các câu lệnh CREATE INDEX trong SQL Server

Chủ đề này List of all index & index columns in SQL Server DB có các mẹo tuyệt vời về cách tìm chúng. Nhưng một kịch bản để tạo ra các tuyên bố CREATE INDEX sẽ là tuyệt vời. Đôi khi chúng ta đi vào một tình huống mà không có đầy đủ dữ liệu, hoặc các chỉ mục đã được thêm vào một cách đặc biệt theo thời gian mà không cần tài liệu, do đó, các câu lệnh tạo bị thiếu. Giống như trong một tình huống tôi tìm thấy bản thân mình ngay bây giờ.

Cảm ơn.

+1

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

Trả lời

10

Sử dụng Tạo Script từ SQL Management Studio và chọn "Chỉ số Script" tùy chọn (theo tùy chọn nâng cao Scripting)

+0

Điều này làm việc hoàn hảo. Cảm ơn bạn! (Và nhờ những người khác cũng có, tôi đánh giá cao sự giúp đỡ của bạn). – royappa

+3

Tôi có thể nói rõ ràng, nhưng để đến đó, bạn nhấp chuột phải vào cơ sở dữ liệu -> Công việc -> Tạo Tập lệnh ... –

3

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 
1

Bạn có thể làm điều đó trên một bảng theo từng bảng bằng cách sử dụng cửa sổ "Object Explorer"

Chuyển đến chỉ số thư mục trong studio quản lý, đánh dấu thư mục sau đó mở cửa sổ Object Explorer

Sau đó, bạn có thể "shift Chọn" tất cả các chỉ mục trên bảng đó, nếu bạn nhấp chuột phải vào tập lệnh "TẠO" nó sẽ tạo một tập lệnh với tất cả các chỉ mục liên quan cho bạn.

Các vấn đề liên quan