SQL Server 2012中的索引碎片整理
我正在运行来自SQLFOOL和sqlauthorities等的不同脚本。但是当我检查数据库时,我根本看不到任何碎片整理。我写了一个不起作用的位代码,你能帮我一下吗SQL Server 2012中的索引碎片整理,sql,indexing,sql-server-2012,rebuild,defragmentation,Sql,Indexing,Sql Server 2012,Rebuild,Defragmentation,我正在运行来自SQLFOOL和sqlauthorities等的不同脚本。但是当我检查数据库时,我根本看不到任何碎片整理。我写了一个不起作用的位代码,你能帮我一下吗 Declare @table_name Varchar (70); Declare table_cursor Cursor for select OBJECT_SCHEMA_NAME([OBJECT_ID])+'.' + NAME AS Tablenamee from sys.tables open tab
Declare @table_name Varchar (70);
Declare table_cursor Cursor for
select OBJECT_SCHEMA_NAME([OBJECT_ID])+'.' + NAME AS Tablenamee
from sys.tables
open table_cursor
Fetch next from table_cursor into @table_name
While @@fetch_status = 0
begin
Alter index all on @table_name
REBUILD WITH (FILLFACTOR=80, ONLINE=ON)
fetch next from table_cursor into @table_name
end
Close table_cursor
deallocate table_cursor
获取错误
@table_name附近的语法不正确
您当然需要考虑一个有效的解决方案,然后编写自己的查询。更好的解决方案是使用这个
对于@table_name,您不需要一个动态SQL来实现
Alter index all吗?这是SQL 2012的新特性吗?我真的不知道如何用SQL编写动态任务。我将对此进行研究,为什么不安排一项维护工作,比如每周重建所有索引?没有任何查询需要以这种方式编写/调试/维护。谢谢Salman,我尝试了它,它对我有效。
Declare @table_name as Varchar(70);
declare @sql as nvarchar(max);
DECLARE @ParmDefinition NVARCHAR(100);
Declare table_cursor Cursor for
select top 10 OBJECT_SCHEMA_NAME([OBJECT_ID])+'.' + NAME AS Tablenamee
from sys.tables
open table_cursor
Fetch next from table_cursor into @table_name
While @@fetch_status = 0
begin
set @sql = N'Alter index all on ' + @table_name +'
REBUILD WITH (FILLFACTOR=80, ONLINE=ON)';
SET @ParmDefinition = N'@table_name varchar(70)';
EXECUTE sp_executesql @sql,
@ParmDefinition,
@table_name = @table_name;
fetch next from table_cursor into @table_name
end
Close table_cursor
deallocate table_cursor