加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

重整SqlServer数据库

发布时间:2020-12-12 15:58:26 所属栏目:MsSql教程 来源:网络整理
导读:-- --???ArrangeDB.SQL 重整数据库 -- --?? CopyRights @2003.12.29 Digital China Management System Co.,Ltd. -- --?重整流程:把所有用户表增加 clustered 索引,这样SQL SERVER会重整表,然后 -- 再删除索引 -- --?使用时机:日常维护,建议每周做一次重

--
--???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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读