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来检查输出,并且它将更加可读. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |