Sql server SQL Server:如何更改索引的联机属性的默认值?

Sql server SQL Server:如何更改索引的联机属性的默认值?,sql-server,indexing,Sql Server,Indexing,我需要将几乎所有索引的ONLINE选项的默认值更改为ON,以便使用此脚本重建索引: ALTER INDEX [Index1]|ALL ON [Table1] REBUILD; CREATE NONCLUSTERED INDEX [Index1] ON [Table1] ( [Column1] ASC ) WITH (ONLINE = ON) 将执行以下操作: ALTER INDEX [Index1]|ALL ON [Table1] REBUILD WITH (ONLINE = ON);

我需要将几乎所有索引的
ONLINE
选项的默认值更改为
ON
,以便使用此脚本重建索引:

ALTER INDEX [Index1]|ALL ON [Table1] REBUILD;
CREATE NONCLUSTERED INDEX [Index1] ON [Table1]
(
  [Column1] ASC
) 
WITH (ONLINE = ON)
将执行以下操作:

ALTER INDEX [Index1]|ALL ON [Table1] REBUILD WITH (ONLINE = ON);
我必须在不重新创建索引的情况下执行此操作

但是,奇怪的是,使用此脚本创建索引:

ALTER INDEX [Index1]|ALL ON [Table1] REBUILD;
CREATE NONCLUSTERED INDEX [Index1] ON [Table1]
(
  [Column1] ASC
) 
WITH (ONLINE = ON)
结果索引中的
联机
选项设置为打开
关闭
:-


修复方法:

我发现这是不可能的。
ONLINE
选项不保存在任何位置,它只影响创建或重建索引的当前语句,即使某些选项保存在
sys.indexes
表中。 不指定
ONLINE
选项将使用默认值
OFF
运行脚本。 修复方法是使用上的上的选项显式更新所有重建索引脚本,并确保它将在支持此功能的SQL Server版本(企业版和开发人员版)上运行,并且只在线重建允许的索引。 无法联机重建的索引有:

  • 禁用聚集索引
  • 禁用索引视图
  • Image、ntext、text、varchar(max)、nvarchar(max)、varbinary(max)、XML索引
  • 列存储索引
  • 本地临时表上的索引
试试这个

USE [DATABASE_NAME];
GO
EXEC sp_MSforeachtable @command1="print 'rebuilding indexes in table: ?'", @command2="ALTER INDEX ALL ON ?
REBUILD WITH (ONLINE=ON)";
GO
  • 注意:上面的脚本假定您当前版本的SQL 服务器支持在线索引重建。在另一种情况下,你可以 修改脚本以脱机执行索引重建
我需要更改联机属性的默认值

ONLINE
就像
SORT\u IN_TEMPDB
不是索引属性,它只是
CREATE
/
ALTER index
语句的一个选项


因此,此选项仅影响当前语句,并且不会保存在索引的元数据中。

语句“ALTER index ALL ON TAble1 REBUILD WITH(ONLINE=ON)”使用显式选项重建索引,我希望避免这种情况。这些选项:ALLOW\U ROW\U LOCKS、ALLOW\U PAGE\U LOCKS和FILLFACTOR似乎是持久化的。我可以看到,当从创建的索引生成创建索引脚本时。>>>这些选项:ALLOW_ROW_LOCKS、ALLOW_PAGE_LOCKS和FILLFACTOR都是持久化的。当然,但作为一个选项而不是属性并不意味着它不会持久化。因此,有些选项会持久保存在“sys.indexes”表中,有些则不会。谢谢你,@sepupic!