怎样通过向表加clusted索引重整数据库

来源:岁月联盟 编辑:zhuzhu 时间:2008-01-28

通过向表加clusted索引重整数据库:

----   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 Cursorfor  select name from sysobjects where xtype='U' order by nameopen Cursor1fetch next from Cursor1 into @TableNamewhile @@fetch_status = 0begin --为了检测表中是不是有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),假如已经有了就不做。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 @TableNameend drop table #dcms_index_infoclose Cursor1deallocate Cursor1