gpt4 book ai didi

sql-server - 禁用所有非聚集索引

转载 作者:行者123 更新时间:2023-12-02 03:28:02 25 4
gpt4 key购买 nike

我从数据库中选择了一些非聚集索引,如下所示:

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);

第 13 和 10 个字符是换行/回车符,因此您可以通过将 EXEC 替换为 PRINT 来检查输出,这样会更具可读性。

关于sql-server - 禁用所有非聚集索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com