Я понимаю, что вы можете установить коэффициент заполнения по умолчанию, но я хочу изменить существующие коэффициенты заполнения до значения по умолчанию на всем сервере.Fill Factor - SQL Server, есть ли способ установить Fill Factor через базу данных, сервер или схему?
Fill Factor - SQL Server, есть ли способ установить Fill Factor через базу данных, сервер или схему?
ответ
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
На самом деле из этой статьи https://www.mssqltips.com/sqlservertip/1367/sql-server-script-to-rebuild- all-indexes-for-all-tables-and-all-databases/ –
, но я этого еще не понимаю - im для SQL и выяснения его сейчас –
Просто узнайте о запросах 'CURSOR' и' DYNAMIC' –
коэффициент заполнения по умолчанию 0 (100%) и сценарий в этой статье, поможет вам, что вам нужно
По умолчанию равно 0, а не 80. 0 эквивалентно 100 или «полные страницы листа». https://msdn.microsoft.com/en-us/library/ms177459(v=sql.120).aspx – onupdatecascade
my bad, made edit –
Я попытался запустить код, но я получаю сообщение об ошибке «Курсор с именем «TableCursor» не существует ». Я попытался вытащить курсор базы данных и жесткое кодирование в имени базы данных, но это тоже не работает - у кого есть идеи? –
НАЧАТЬ 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
Сценарий ваших объектов для ALTER, найти-замените часть коэффициента заполнения, выполнить обновленный скрипт -? – CompanyDroneFromSector7G
Ну, я нашел что-то, что, как я думаю, будет работать - на всякий случай любопытные любопытные люди –