Era*_*eir 25 sql-server sql-server-2005
我正在运行DTS来在我的数据库中执行任务,其中首先我需要禁用数据库中的所有索引,并在DTS完成其工作时重新启用它们.
有没有办法可以禁用整个数据库中的所有索引,然后重新启用它们?
我知道如何逐个禁用/启用,有人可以帮助我在DTS中一次禁用/启用所有功能.
小智 34
这是一个脚本,它将为数据库中的所有非聚簇索引输出ALTER语句.您可以轻松地修改它以输出聚簇索引的REBUILD脚本和脚本
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
Run Code Online (Sandbox Code Playgroud)
Rah*_*arg 27
我们可以使用下面的脚本来禁用索引
ALTER INDEX ALL ON [TableName]
DISABLE;
Run Code Online (Sandbox Code Playgroud)
将批量插入到表中,然后在脚本下面运行.
ALTER INDEX ALL ON [TableName]
REBUILD;
Run Code Online (Sandbox Code Playgroud)
小智 26
这适用于SQL Server 2008和更新版本.它允许不同的模式以及具有空格,短划线和必须引用的其他特殊字符的名称.在sql语句中使用方括号[]有什么用?
这些脚本将代码输出到结果选项卡中.您必须复制/粘贴到查询选项卡并执行它们.
禁用脚本
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
Run Code Online (Sandbox Code Playgroud)
启用脚本(重建)
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
Run Code Online (Sandbox Code Playgroud)
这是基于另一个答案.
小智 5
要启用索引,您必须重建它.此脚本将重建所有已禁用的索引.
DECLARE @my_sql2 NVARCHAR(200);
DECLARE cur_rebuild CURSOR FOR
SELECT 'ALTER INDEX ' + i.name + ' ON ' + t.name + ' REBUILD' FROM sys.indexes i JOIN sys.tables t ON i.object_id = t.object_id WHERE i.is_disabled = 1 ORDER BY t.name, i.name;
OPEN cur_rebuild;
FETCH NEXT FROM cur_rebuild INTO @my_sql2;
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE sp_executesql @my_sql2;
FETCH NEXT FROM cur_rebuild INTO @my_sql2;
END;
CLOSE cur_rebuild;
DEALLOCATE cur_rebuild;
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57192 次 |
| 最近记录: |