-- --???ArrangeDB.SQL 重整数据库 -- --?? CopyRights @2003.12.29 Digital China Management System Co.,Ltd. -- --?重整流程:把所有用户表增加 clustered 索引,这样SQL SERVER会重整表,然后 -- 再删除索引 -- --?使用时机:日常维护,建议每周做一次重整。 -- --?注意事项:做完后请做数据库收缩,更新统计,重新索引,及完整性检查
--drop table #dcms_index_info --要用到的临时表 create table #dcms_index_info ( ? index_name sysname, ? index_description varchar(210), ? index_keys varchar(2078) )
--设置环境 set NOCOUNT ON --程序开始:变量 declare @sql varchar(500) declare @TableName varchar(20) declare @ErrorSave int
--用所有的用户表处理 declare Cursor1 Cursor for ?select name from sysobjects where xtype='U' order by name
open Cursor1 fetch next from Cursor1 into @TableName
while @@fetch_status = 0 begin ?--为了检测表中是不是有CREATE_DATE这个列,易飞的表中都有,如果没有就跳过,不过处理 ?--应该还有更好的方法,我暂时这样用了。不想用sp_columns因为不想建表,慢就慢点吧 ?if COLUMNPROPERTY(OBJECT_ID(@TableName),'CREATE_DATE','PRECISION') is not null ?begin ??print 'process table ' + @TableName
??--取得当前表的索引信息 ??delete #dcms_index_info ??set @sql = ' sp_helpindex ''' + @TableName + ''' ' ??insert into #dcms_index_info exec (@sql)
??--查找是不是已经有聚簇索引(clustered),如果已经有了就不做,在易飞中有clustered索引是少数 ??select index_name from #dcms_index_info where index_description?like 'clustered%'
??if @@ROWCOUNT = 0 ??begin ???set @sql = ' create clustered index DcTempIndex001 on ' + @TableName + ' ( CREATE_DATE ) ' ???exec (@sql)
???set @sql = ' DROP index ' + @TableName + '.DcTempIndex001 ' ???exec (@sql) ??end ?end
?fetch next from Cursor1 into @TableName end ? drop table #dcms_index_info close Cursor1 deallocate Cursor1?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|