sql-server – 禁用所有非聚簇索引

前端之家收集整理的这篇文章主要介绍了sql-server – 禁用所有非聚簇索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从我的数据库中选择了一些非聚集索引,具体如下:
SELECT  sys.objects.name tableName,sys.indexes.name indexName
FROM    sys.indexes
        JOIN sys.objects ON sys.indexes.object_id = sys.objects.object_id
WHERE   sys.indexes.type_desc = 'NONCLUSTERED'
        AND sys.objects.type_desc = 'USER_TABLE'

我想在每个结果上运行以下内容

ALTER INDEX indexName ON tableName DISABLE

我该怎么做呢?有没有更好的办法?

编辑

我这样做是为了截断表,然后使用“ALTER INDEX bla ON table REBUILD”进行重建.这需要自动化,所以丢弃和重建将是一个更高的维护活动,我宁愿避免.这是坏的计划吗?我需要一种以最少的开销排空桌子的手段.

解决方法

您可以将查询构建为select语句,如下所示:
DECLARE @sql AS VARCHAR(MAX)='';

SELECT @sql = @sql + 
'ALTER INDEX ' + sys.indexes.name + ' ON  ' + sys.objects.name + ' DISABLE;' +CHAR(13)+CHAR(10)
FROM 
    sys.indexes
JOIN 
    sys.objects 
    ON sys.indexes.object_id = sys.objects.object_id
WHERE sys.indexes.type_desc = 'NONCLUSTERED'
  AND sys.objects.type_desc = 'USER_TABLE';

EXEC(@sql);

Chars 13和10是换行/回车,所以您可以通过用PRINT替换EXEC来检查输出,并且它将更加可读.

猜你在找的MsSQL相关文章