设为首页 收藏本站
查看: 570|回复: 0

[经验分享] 生成索引信息及自动创建脚本(Sql Server 2000)

[复制链接]

尚未签到

发表于 2016-11-5 08:53:10 | 显示全部楼层 |阅读模式
DSC0000.jpg 生成索引信息及自动创建脚本




create proc p_helpindex

@tbname sysname ='' ,

@CLUSTERED int = '1'

as

--生成索引信息及索引创建脚本(Sql Server 2000)

--author : happyflystone

-- Http://blog.csdn.net/happyflystone

--@tbname 表名,空返回空

--@CLUSTERED 是否显示聚集索引,1显示聚集索引,2不显示聚集索引

--调用:p_helpindex 'dbo.customers','1'

--转载请注明出处

if @tbname is null or @tbname = ''

return -1

declare @t table(

table_name nvarchar(100),

schema_name nvarchar(100),

fill_factor int,

is_padded int,

ix_name nvarchar(100),

type int,

keyno int,

column_name nvarchar(200),

cluster varchar(20),

ignore_dupkey varchar(20),

[unique] varchar(20),

groupfile varchar(10)

)

declare

@table_name nvarchar(100),

@schema_name nvarchar(100),

@fill_factor int,

@is_padded int,

@ix_name nvarchar(100),@ix_name_old nvarchar(100),

@type int,

@keyno int,

@column_name nvarchar(100),--@column_name_temp nvarchar(500),

@cluster varchar(20),

@ignore_dupkey varchar(20),

@unique varchar(20),

@groupfile varchar(10)

declare ms_crs_ind cursor local static for

select

  distinct table_name = a.name,

  schema_name = b.name,

  fill_factor= c.origfillfactor,

  is_padded = case when c.status = 256 then 1 else 0 end,

  ix_name = c.name,

type = c.indid , d.keyno,

  column_name = e.name + case when indexkey_property(a.id,c.indid, d.keyno, 'isdescending') =1 then ' desc ' else '' end,

case when (c.status & 16)<>0 then 'clustered' else 'nonclustered' end,

case when (c.status & 1) <>0 then 'IGNORE_DUP_KEY' else '' end,

case when (c.status & 2) <>0 then 'unique' else '' end ,

  g.groupname

from sysobjects a

inner join sysusers b on a.uid = b.uid

inner join sysindexes c on a.id = c.id

inner join sysindexkeys d on a.id = d.id and c.indid = d.indid

inner join syscolumns e on a.id = e.id and d.colid = e.colid

inner join sysfilegroups g on g.groupid = c.groupid

left join master.dbo.spt_values f on f.number = c.status and f.type = 'I'

where a.id = object_id(@tbname) and c.indid < 255

and (c.status & 64)=0 and c.indid >= @CLUSTERED

order by c.indid,d.keyno


open ms_crs_ind

fetch ms_crs_ind into @table_name ,

@schema_name ,

@fill_factor,

@is_padded,

@ix_name,

@type ,

@keyno,

@column_name,

@cluster ,

@ignore_dupkey ,

@unique ,

@groupfile



if @@fetch_status < 0

begin

deallocate ms_crs_ind

raiserror(15472,-1,-1) --'Object does not have any indexes.'

return -1

end

while @@fetch_status >= 0

begin

if exists(select 1 from @t where ix_name = @ix_name)

update @t

set column_name = column_name+','+@column_name

WHERE IX_NAME = @IX_NAME

else

  insert into @t

select @table_name ,

  @schema_name ,

  @fill_factor,

  @is_padded,

  @ix_name,

  @type ,

  @keyno,

  @column_name,

  @cluster ,

  @ignore_dupkey ,

  @unique ,

  @groupfile

fetch ms_crs_ind into @table_name ,

  @schema_name ,

  @fill_factor,

  @is_padded,

  @ix_name,

  @type ,

  @keyno,

  @column_name,

  @cluster ,

  @ignore_dupkey ,

  @unique ,

  @groupfile


end

deallocate ms_crs_ind


select 'CREATE '+upper([unique])+

case when [unique] = '' then '' else ' ' end+upper(cluster)+' INDEX '+ix_name+' ON '+table_name+'('+column_name+')' +

case when fill_factor > 0 or is_padded = 1 or (upper(cluster) != 'NONCLUSTERED' and ignore_dupkey = 'IGNORE_DUP_KEY' )

then ' WITH '

+case when is_padded = 1 then 'PAD_INDEX,' else '' end

+case when fill_factor > 0 then 'FILLFACTOR ='+ltrim(fill_factor) else '' end

+case when ignore_dupkey = 'IGNORE_DUP_KEY' and upper(cluster) = 'NONCLUSTERED'

then case when (fill_factor > 0 or is_padded = 1)

then ',IGNORE_DUP_KEY' else ',IGNORE_DUP_KEY' end

else '' end

else '' end

+' ON ['+ groupfile+']' as col

from @t

return 0

go




以下为测试



--test

create table tb_test(id int,dept varchar(20))

go

CREATE UNIQUE CLUSTERED INDEX idx_6 ON tb_test(id) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_1 ON tb_test(id) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_2 ON tb_test(id) WITH PAD_INDEX,FILLFACTOR =90 ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_3 ON tb_test(id) WITH FILLFACTOR =90 ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_4 ON tb_test(id,dept) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_5 ON tb_test(dept,id) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_7 ON tb_test(id,dept desc ) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_8 ON tb_test(id desc ,dept) ON [PRIMARY]

go


exec p_helpindex 'tb_test'

drop proc p_helpindex

drop table tb_test


/*


col

-----------------------------------------------------

CREATE UNIQUE CLUSTERED INDEX idx_6 ON tb_test(id) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_1 ON tb_test(id) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_2 ON tb_test(id) WITH FILLFACTOR =90 ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_3 ON tb_test(id) WITH FILLFACTOR =90 ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_4 ON tb_test(id,dept) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_5 ON tb_test(dept,id) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_7 ON tb_test(id,dept desc ) ON [PRIMARY]

CREATE NONCLUSTERED INDEX idx_8 ON tb_test(id desc ,dept) ON [PRIMARY]


*/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-295985-1-1.html 上篇帖子: [转]SQL Server 2000执行计划成本(5/5) 下篇帖子: 解密SQL SERVER 2005加密存储过程,函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表