2015-12-29 4 views
0

Я понимаю, что вы можете установить коэффициент заполнения по умолчанию, но я хочу изменить существующие коэффициенты заполнения до значения по умолчанию на всем сервере.Fill Factor - SQL Server, есть ли способ установить Fill Factor через базу данных, сервер или схему?

+0

Сценарий ваших объектов для ALTER, найти-замените часть коэффициента заполнения, выполнить обновленный скрипт -? – CompanyDroneFromSector7G

+0

Ну, я нашел что-то, что, как я думаю, будет работать - на всякий случай любопытные любопытные люди –

ответ

0
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 
+0

На самом деле из этой статьи https://www.mssqltips.com/sqlservertip/1367/sql-server-script-to-rebuild- all-indexes-for-all-tables-and-all-databases/ –

+0

, но я этого еще не понимаю - im для SQL и выяснения его сейчас –

+0

Просто узнайте о запросах 'CURSOR' и' DYNAMIC' –

0

коэффициент заполнения по умолчанию 0 (100%) и сценарий в этой статье, поможет вам, что вам нужно

https://www.mssqltips.com/sqlservertip/1367/sql-server-script-to-rebuild-all-indexes-for-all-tables-and-all-databases/

+0

По умолчанию равно 0, а не 80. 0 эквивалентно 100 или «полные страницы листа». https://msdn.microsoft.com/en-us/library/ms177459(v=sql.120).aspx – onupdatecascade

+0

my bad, made edit –

+0

Я попытался запустить код, но я получаю сообщение об ошибке «Курсор с именем «TableCursor» не существует ». Я попытался вытащить курсор базы данных и жесткое кодирование в имени базы данных, но это тоже не работает - у кого есть идеи? –

0

НАЧАТЬ TRAN

DECLARE @TABLE_NAME VARCHAR (MAX)

DECLARE table_cursor CURSOR LOCAL ДЛЯ
SELECT TABLE_NAME ОТ INFORMATION_SCHEMA.TABLES

ОТКРЫТЫЙ table_cursor

FETCH СЛЕДУЮЩИЙ ИЗ table_cursor НА @TABLE_NAME

WHILE @@FETCH_STATUS = 0 

     BEGIN 

     PRINT 'ALTER INDEX ALL ON '[email protected]_name+' 

REBUILD С (FILLFACTOR = 100)»

 END 
     CLOSE table_cursor; 
    DEALLOCATE table_cursor; 

ROLLBACK TRAN