我正在运行一个DTS在我的数据库中执行任务,首先我需要禁用数据库中的所有索引,并在DTS完成工作后重新启用它们。
是否有一种方法可以禁用整个数据库中的所有索引,然后重新启用它们?
我知道如何逐一禁用/启用,有人可以帮助我的方式禁用/启用所有的一次作为一个步骤在DTS中。
发布于 2013-08-15 10:33:09
下面的脚本将为数据库中的所有非聚集索引输出ALTER语句。您可以轻松地对其进行修改,以输出重建脚本和聚集索引的脚本
select 'ALTER INDEX [' + I.name + '] ON [' + T.name + '] DISABLE'
from sys.indexes I
inner join sys.tables T on I.object_id = T.object_id
where I.type_desc = 'NONCLUSTERED'
and I.name is not null
发布于 2016-02-18 13:01:56
我们可以使用下面的脚本禁用索引
ALTER INDEX ALL ON [TableName]
DISABLE;
对表进行批量插入,然后在脚本下运行。
ALTER INDEX ALL ON [TableName]
REBUILD;
发布于 2015-08-14 16:29:01
这适用于SQL Server 2008及更高版本。它允许不同的模式和名称,其中包含空格、破折号和其他必须用引号引起来的特殊字符。What is the use of the square brackets [] in sql statements?
这些脚本会将代码输出到results选项卡中。您必须将它们复制/粘贴到查询选项卡中并执行它们。
禁用脚本
SELECT 'ALTER INDEX ' + QUOTENAME(I.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(T.schema_id))+'.'+ QUOTENAME(T.name) + ' DISABLE'
FROM sys.indexes I
INNER JOIN sys.tables T ON I.object_id = T.object_id
WHERE I.type_desc = 'NONCLUSTERED'
AND I.name IS NOT NULL
AND I.is_disabled = 0
启用脚本(重建)
SELECT 'ALTER INDEX ' + QUOTENAME(I.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(T.schema_id))+'.'+ QUOTENAME(T.name) + ' REBUILD'
FROM sys.indexes I
INNER JOIN sys.tables T ON I.object_id = T.object_id
WHERE I.type_desc = 'NONCLUSTERED'
AND I.name IS NOT NULL
AND I.is_disabled = 1
这是基于这里的另一个答案。
https://stackoverflow.com/questions/18236055
复制相似问题