Sql Server通过tsql更改所有索引的填充因子值

dan*_*ero 7 sql t-sql fillfactor azure bacpac

我必须将我的数据库演示为bacpac文件以将其导入Azure.当我尝试导出时,我得到一个错误,因为任何索引都有一个fillFactor值.

我已经找到了如何为所有索引设置fillFactor值,但是我不能指定0,值必须在1到100之间.如果我在管理工作室中更改了值,我可以将其设置为0.

问题是我有很多索引需要更改,我想通过tsql将fillFactor值更改为所有索引.

有任何想法吗?.

谢谢.

Nic*_*ias 7

对于单个数据库中的所有表来说更简单:

   select 'ALTER INDEX ALL ON '
   + quotename(s.name) + '.' + quotename(o.name) + ' REBUILD WITH (FILLFACTOR = 99)' 
   from sys.objects o
   inner join sys.schemas s on o.schema_id = s.schema_id
   where type='u' and is_ms_shipped=0
Run Code Online (Sandbox Code Playgroud)

生成您可以复制并执行的语句。


Der*_*r U -1

ALTER INDEX yourindex ON table.column
REBUILD WITH (FILLFACTOR = 0); 
Run Code Online (Sandbox Code Playgroud)

做这个工作。0 等于 100(请参阅http://msdn.microsoft.com/en-us/library/ms177459.aspx),表示索引中不留空白。

你必须为每个索引运行这个。不过,重建可能需要相当长的时间。

  • 如果我尝试使用 fillfactor=0,我会收到以下消息: Fillfactor 0 不是有效的百分比;fillfactor 必须介于 1 和 100 之间。我需要将其设置为 0 才能将我的数据库导出到 bacpac。 (2认同)
  • 迁移到 SQL Azure(不能有填充因子值) (2认同)