-- -- 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
[Sql Server]实用SQL: 查看表字段信息 [Sql Server]实用SQL: 查看表字段信息
|