SQL生成全库或某张表全部索引对应关系和创建语句
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;
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751655.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义