我有一个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.jb51.cc/mssql/80009.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。