SQL Server 2012中的索引碎片整理

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

我正在运行来自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 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