gpt4 book ai didi

sql - 如果名称类似,则删除索引

转载 作者:行者123 更新时间:2023-12-04 20:57:19 25 4
gpt4 key购买 nike

我想找到一种方法,通过 SQL Server 中的单个查询从多个表中删除多个索引。我可以使用下面的查询找到索引名称和表,但我有点不知道应该如何删除它找到的表。

SELECT
so.name AS TableName
, si.name AS IndexName
, si.type_desc AS IndexType
FROM
sys.indexes si
JOIN sys.objects so ON si.[object_id] = so.[object_id]
WHERE
so.type = 'U' --Only get indexes for User Created Tables
AND si.name IS NOT NULL
and si.name like 'NCI%'
ORDER BY
so.name, si.type

最佳答案

您可以从 SELECT 开始构建您的放置脚本:

DECLARE @SQL NVARCHAR(MAX) = N''

SELECT @SQL = @SQL + 'DROP INDEX ' + so.name + '.' + si.name + ';' + CHAR(13) + CHAR(10)
FROM
sys.indexes si
JOIN sys.objects so ON si.[object_id] = so.[object_id]
WHERE
so.type = 'U' --Only get indexes for User Created Tables
AND si.name IS NOT NULL
and si.name like '%%'
ORDER BY
so.name, si.type

PRINT @SQL
EXEC (@SQL)

@SQL 是增量构建的,将包含所有由 ; 分隔的 DROP 语句,以便它们在单个批处理中执行。 DROP表可以用类似的方式完成。

注意:您的查询还捕获与 PK 关联的索引,并且它们不能直接删除,因为它们被约束加倍(PK = 约束 + 索引)

关于sql - 如果名称类似,则删除索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783119/

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