首页 MsSql sql-server – 如何使用MSSQL,重建所有表上的所有索引? MSSQL Server 2008

sql-server – 如何使用MSSQL,重建所有表上的所有索引? MSSQL Server 2008

我有一个mssql数据库,我们称之为:mssqlDB01.我的任务是在所有表上执行碎片整理.此数据库有几百个表,每个表的每个表的范围为1到15个索引. Google让我发现了一种对每个表的所有索引进行碎片整理的做法,但我无法弄清楚如何在所有表上进行碎片整理. ALTER INDEX

我有一个mssql数据库,我们称之为:mssqlDB01.我的任务是在所有表上执行碎片整理.此数据库有几百个表,每个表的每个表的范围为1到15个索引.

Google让我发现了一种对每个表的所有索引进行碎片整理的做法,但我无法弄清楚如何在所有表上进行碎片整理.

ALTER INDEX ALL ON TABLENAME REBUILD;

我正在寻找的是

ALTER INDEX ALL ON * REBUILD;

但它抱怨

Msg 102,Level 15,State 1,Line 2
Incorrect syntax near '*'.`

下面让我找到我的数据库中的所有表

SELECT * FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'

我可以以某种方式将其推入命令吗?

ALTER INDEX ALL ON (SELECT * FROM information_schema.tables WHERE TABLE_TYPE='BASE TABLE'; ) REBUILD;

解决方法

您可能会编写一个使用动态SQL来执行此操作的脚本,但为什么在您可以使用其他人时呢?
Ola Hallengren’s是最知名和免费的,但
Minion Ware also has a free reindex script.

如果你坚持自己写,这样的东西可能会起作用:

Use mssqlDB01

Declare @TBname nvarchar(255),@SQL nvarchar(max) 


select @TBname = min(TABLE_NAME) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

while @TBname is not null

BEGIN
    set @SQL='ALTER INDEX ALL ON [' + @TBname + '] REBUILD;'
    --print @SQL
    EXEC SP_EXECUTESQL @SQL
    select @TBname = min(TABLE_NAME) from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' and TABLE_NAME > @TBname          
END

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/shujuku/mssql/20200805/8276.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部