加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:43:50 所属栏目:MsSql教程 来源:网络整理
导读:我从我的数据库中选择了一些非聚集索引,具体如下: SELECT sys.objects.name tableName,sys.indexes.name indexNameFROM sys.indexes JOIN sys.objects ON sys.indexes.object_id = sys.objects.object_idWHERE sys.indexes.type_desc = 'NONCLUSTERED' AND s
我从我的数据库中选择了一些非聚集索引,具体如下:
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来检查输出,并且它将更加可读.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读