gpt4 book ai didi

sql - 如何使用一个命令删除 SQL 数据库中的所有索引?

转载 作者:行者123 更新时间:2023-12-02 01:56:01 26 4
gpt4 key购买 nike

那么,如何用一个命令删除 SQL 数据库中的所有索引呢?我有这个命令可以获取所有 20 个左右的 drop 语句,但是如何从这个“结果集”运行所有这些 drop 语句?

select * from vw_drop_idnex;

给我相同列表的另一个变体是:

SELECT  'DROP INDEX ' + ix.Name + ' ON ' + OBJECT_NAME(ID)  AS QUERYLIST
FROM sysindexes ix
WHERE ix.Name IS NOT null and ix.Name like '%pre_%'

我尝试执行“exec(select cmd from vw_drop_idnex)”,但没有成功。我正在寻找像 for 循环一样工作并逐一运行查询的东西。

------------------------------------------------

在 Rob Farley 的帮助下,剧本的最终草案是:

declare @ltr nvarchar(1024);
SELECT @ltr = ( select 'alter table '+o.name+' drop constraint '+i.name+';'
from sys.indexes i join sys.objects o on i.object_id=o.object_id
where o.type<>'S' and is_primary_key=1
FOR xml path('') );
exec sp_executesql @ltr;

declare @qry nvarchar(1024);
select @qry = (select 'drop index '+o.name+'.'+i.name+';'
from sys.indexes i join sys.objects o on i.object_id=o.object_id
where o.type<>'S' and is_primary_key<>1 and index_id>0
for xml path(''));
exec sp_executesql @qry

最佳答案

你已经很接近了。

declare @qry nvarchar(max);
select @qry =
(SELECT 'DROP INDEX ' + quotename(ix.name) + ' ON ' + quotename(object_schema_name(object_id)) + '.' + quotename(OBJECT_NAME(object_id)) + '; '
FROM sys.indexes ix
WHERE ix.Name IS NOT null and ix.Name like '%prefix_%'
for xml path(''));
exec sp_executesql @qry

关于sql - 如何使用一个命令删除 SQL 数据库中的所有索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344401/

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