最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

生成索引信息及索引创建脚本

来源:动视网 责编:小采 时间:2020-11-09 14:44:36
文档

生成索引信息及索引创建脚本

生成索引信息及索引创建脚本:create proc p_helpindex @tbname sysname = ,@type char(1) = 1as--生成索引信息及索引创建脚本--@tbname 表名,空返回所有表索引--@type 是否显示聚集索引,1显示聚集索引,2不显示聚集索引--调用:p_helpindex dbo.customers,
推荐度:
导读生成索引信息及索引创建脚本:create proc p_helpindex @tbname sysname = ,@type char(1) = 1as--生成索引信息及索引创建脚本--@tbname 表名,空返回所有表索引--@type 是否显示聚集索引,1显示聚集索引,2不显示聚集索引--调用:p_helpindex dbo.customers,


create proc p_helpindex @tbname sysname = ,@type char(1) = 1as--生成索引信息及索引创建脚本--@tbname 表名,空返回所有表索引--@type 是否显示聚集索引,1显示聚集索引,2不显示聚集索引--调用:p_helpindex dbo.customers,1with t as (select rank() ove

create proc p_helpindex 
@tbname sysname ='' ,@type char(1) = '1'
as
--生成索引信息及索引创建脚本
--@tbname 表名,空返回所有表索引
--@type 是否显示聚集索引,1显示聚集索引,2不显示聚集索引
--调用:p_helpindex 'dbo.customers','1'
with t as (
select rank() over (order by b.name,a.name,c.name) as id,c.index_id, 
b.name as schema_name,a.name as table_name,c.fill_factor,c.is_padded,
c.name as ix_name,c.type,e.name as column_name,d.index_column_id,c.is_primary_key,
d.is_included_column,f.name as filegroup_name,c.is_unique,c.ignore_dup_key,
d.is_descending_key as is_descending_key,c.allow_row_locks,c.allow_page_locks
from sys.tables as a
inner join sys.schemas as b on a.schema_id=b.schema_id and a.is_ms_shipped=0
inner join sys.indexes as c on a.object_id=c.object_id
inner join sys.index_columns as d on d.object_id=c.object_id and d.index_id=c.index_id
inner join sys.columns as e on e.object_id=d.object_id and e.column_id=d.column_id
inner join sys.data_spaces as f on f.data_space_id=c.data_space_id 
where a.object_id like '%'+isnull(ltrim(object_id(@tbname)),'')+'%'
and c.is_hypothetical=0 and is_disabled=0 and c.type>=@type
)
select distinct a.schema_name,a.table_name,a.ix_name,
case a.type when 1 then 'clustered' when 2 then 'nonclustered' else '' end as index_type,
case a.is_primary_key when 0 then 'no' else 'yes' end as is_primary_key,
m.ix_index_column_name,isnull(m.ix_index_include_column_name,'') as ix_index_include_column_name,
a.filegroup_name,replace('create '+ case when is_unique=1 then 'unique ' else '' end 
+ case when a.type=1 then 'clustered' else 'nonclustered' end +' index '
+ a.ix_name+' on '+a.schema_name+'.'+a.table_name+'('+m.ix_index_column_name+')'
+ case when m.ix_index_include_column_name is null then '' else 'include('+m.ix_index_include_column_name+')'end 
+ case when fill_factor>0 or ignore_dup_key=1 or is_padded=1 or allow_row_locks=0 or allow_page_locks=0 then 'with(' else '' end
+ case when fill_factor>0 then ',fillfactor='+rtrim(fill_factor) else '' end 
+ case when is_padded=1 then ',pad_index=on' else '' end 
+ case when ignore_dup_key=1 then ',ignore_dup_key=on' else '' end 
+ case when allow_row_locks=0 then ',allow_row_locks=off' else '' end
+ case when allow_page_locks=0 then ',allow_page_locks=off' else '' end
+ case when fill_factor>0 or ignore_dup_key=1 or is_padded=1 or allow_row_locks=0 or allow_page_locks=0 then ')' else '' end,'with(,','with(')
as sqlscript
from t as a
outer apply 
( 
 select ix_index_column_name= stuff(replace(replace( 
 ( 
 select case when b.is_descending_key =1 then column_name + ' desc' else column_name end as column_name 
 from t as b where a.id=b.id and is_included_column=0 order by index_column_id for xml auto 
 ), '', ''), 1, 1, '') 
 ,ix_index_include_column_name= stuff(replace(replace( 
 ( 
 select column_name from t as b where a.id=b.id and is_included_column=1 
 order by index_column_id for xml auto 
 ), '', ''), 1, 1, '') 
)m 
order by a.schema_name,a.table_name,a.ix_name

--测试:
create database db_test
go
use db_test
go

create table tb(id int primary key,col_1 varchar(20),col_2 varchar(30),col_3 varchar(30))
go
insert into tb select 1,'a','b','c'
go
create index ix_01 on tb(col_1)
create index ix_03 on tb(col_1,col_2 desc)
create index ix_02 on tb(col_1)include(col_2)with(fillfactor=80,pad_index=on)
create unique index ix_04 on tb(col_1,col_3)include(col_2)with(ignore_dup_key=on)
go

--执行这个脚本的结果
p_helpindex tb
/*--生成的创建脚本
create nonclustered index ix_01 on dbo.tb(col_1)
create nonclustered index ix_02 on dbo.tb(col_1)include(col_2)with(fillfactor=80,pad_index=on)
create nonclustered index ix_03 on dbo.tb(col_1,col_2 desc)
create unique nonclustered index ix_04 on dbo.tb(col_1,col_3)include(col_2)with(ignore_dup_key=on)
create unique clustered index PK__tb__7C8480AE on dbo.tb(id)
*/

文档

生成索引信息及索引创建脚本

生成索引信息及索引创建脚本:create proc p_helpindex @tbname sysname = ,@type char(1) = 1as--生成索引信息及索引创建脚本--@tbname 表名,空返回所有表索引--@type 是否显示聚集索引,1显示聚集索引,2不显示聚集索引--调用:p_helpindex dbo.customers,
推荐度:
标签: 信息 创建 生成
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top