DECLARE @tabname varchar(50)
set @tabname='bill'--表名
if ( object_id('tempdb.dbo.#IDX') is not null)
begin
DROP TABLE #idx
end
SELECT a.name as IndexName,
c.name as TableName,
d.name as IndexColumn,
i.is_primary_key,--为主键=1,其他为0
-- i.is_unique_constraint, --唯一约束=1,其他为0
i.type,
b.keyno, --列的次序,0为include的列
s.name as schemaName
into #idx
FROM sysindexes a
INNER JOIN sys.tables t ON a.id = t.object_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
INNER JOIN sysindexkeys b ON a.id = b.id AND a.indid = b.indid
INNER JOIN sysobjects c ON b.id = c.id
INNER JOIN syscolumns d ON b.id = d.id AND b.colid = d.colid
INNER join sys.indexes i
on i.index_id=a.indid and c.id=i.object_id
WHERE a.indid NOT IN (0, 255) --indid = 0 或 255则为表,其他为索引。
-- and c.xtype='U' /*U = 用户表*/ and c.status>0 --查所有用户表
-- AND c.name = @tabname --只查指定表
and c.type = 'U' --S = 系统表
ORDER BY c.name, a.name,b.keyno asc
-- 查询表、字段、索引
SELECT * from #idx where tablename='bill'
--select * from sys.indexes
--select * from sysindexkeys
--select * from sysobjects
--select * from sys.tables
--select * from sys.SCHEMAs
-- select * from syscolumns
-- select * from sysindexes
--sp_help clientcardinfo
-- 生成全库索引创建语句
select case
when is_primary_key=1 then 'ALTER TABLE ['+ TableName +'] ADD CONSTRAINT ['+INDEXNAME+'] PRIMARY KEY ('+IndexColumn+')'
when type=1 then 'CREATE CLUSTERED INDEX [' + INDEXNAME + ']' +' ON [' + schemaName + '].[' + TableName + '] ' + '(' + IndexColumn + ' ASC)'
else 'CREATE NONCLUSTERED INDEX [' + INDEXNAME + ']' +' ON [' + schemaName + '].[' + TableName + '] ' + '(' + IndexColumn + ' ASC)' end INDEX_DDL
from #idx
-- select case
-- when a.is_primary_key=1 then 'ALTER TABLE '+a.tablename+' ADD CONSTRAINT '+a.indexname+' PRIMARY KEY ('+a.IndexColumn+')'
-- when a.is_unique_constraint=1 then 'ALTER TABLE '+a.tablename+' ADD CONSTRAINT '+a.indexname+' UNIQUE NONCLUSTERED('+a.IndexColumn+') WITH(ONLINE=ON,FillFactor=90)'
-- else 'create index '+a.indexname+' on '+a.tablename+'('+a.IndexColumn+') '+
-- (case when b.IndexColumn is null then '' else 'include('+b.IndexColumn+') ' end)+'WITH(ONLINE=ON,FillFactor=90)' end INDEX_DDL
-- from #IDX2 a left join #IDX3 b on a.indexname=b.indexname
-- where a.is_primary_key=0 --去掉主键
-- select * FROM #IDX2;