填充因子——SQL Server,是否有一种方法可以在数据库、服务器或架构中设置填充因子



我知道您可以设置默认填充因子,但我想在整个服务器上将现有填充因子改回默认值。

DECLARE @Database VARCHAR(255)   
DECLARE @Table VARCHAR(255)  
DECLARE @cmd NVARCHAR(500)  
DECLARE @fillfactor INT 
SET @fillfactor = 90 
DECLARE DatabaseCursor CURSOR FOR  
SELECT name FROM master.dbo.sysdatabases   
WHERE name NOT IN ('master','msdb','tempdb','model','distribution')   
ORDER BY 1  
OPEN DatabaseCursor  
FETCH NEXT FROM DatabaseCursor INTO @Database  
WHILE @@FETCH_STATUS = 0  
BEGIN  
   SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' + 
  table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES 
  WHERE table_type = ''BASE TABLE'''   
   -- create table cursor  
   EXEC (@cmd)  
   OPEN TableCursor   
   FETCH NEXT FROM TableCursor INTO @Table   
   WHILE @@FETCH_STATUS = 0   
   BEGIN   
       IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9)
       BEGIN
           -- SQL 2005 or higher command 
           SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' 
           EXEC (@cmd) 
       END
       ELSE
       BEGIN
          -- SQL 2000 command 
          DBCC DBREINDEX(@Table,' ',@fillfactor)  
       END
       FETCH NEXT FROM TableCursor INTO @Table   
   END   
   CLOSE TableCursor   
   DEALLOCATE TableCursor  
   FETCH NEXT FROM DatabaseCursor INTO @Database  
END  
CLOSE DatabaseCursor   
DEALLOCATE DatabaseCursor

开始交易

声明@表格名称VARCHAR(最大)

DECLARE table_cursor cursor LOCAL对于
选择表名称来自INFORMATION_SCHEMA.TABLES

打开表格_光标

FETCH NEXT FROM table_cursor INTO@表名称

    WHILE @@FETCH_STATUS = 0
        BEGIN 
        PRINT 'ALTER INDEX ALL ON '+@table_name+'

使用(填充因子=100)'重建

        END
        CLOSE table_cursor;
    DEALLOCATE table_cursor;

ROLLBACK TRAN

最新更新