sql - 删除索引或更改

标签 sql sql-server

我试图在Informatica中的目标表上删除pk约束并删除索引,以下这些语句首次成功运行。

IF EXISTS (SELECT Name FROM sysindexes WHERE Name = 'xyz') 
DROP INDEX [xyz] ON [dbo].[Table_Name];

IF EXISTS (SELECT Name FROM sysindexes WHERE Name = 'xyz')
ALTER TABLE [dbo].[Table_Name] DROP CONSTRAINT [xyz];

但是,如果我第二次运行相同的查询,则会出现错误:

Cannot drop the index 'dbo.Table_Name.xyz', because it does not exist or you do not have permission



我需要一种If ... Else语句语法,例如是否存在drop else end或成功的东西。

最佳答案

造成这种情况的可能原因是您的数据库上可能有多个名为xyz的索引。您的IF EXISTS SELECT语句未考虑xyz位于哪个表上。

您可以自己运行select语句来自己检查这种情况。

尝试将查询更改为以下内容以限制范围:

If Exists 
(
    Select * 
    From   sys.indexes 
    Where  name = 'xyz' 
    And    Object_Id = Object_Id('dbo.Table_Name')
)
Drop Index xyz On dbo.Table_Name;

关于sql - 删除索引或更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398467/

相关文章:

c# - 包管理器控制台 Visual Studio 2019 返回新行

mysql - 计算研究领域的百分比

python - sql查询中的python列表作为参数

c# - 如果我的 sql 查询返回空白,我应该把我的 C# if 语句放在哪里?

c# - 具有多个连接的 Linq

sql - 临时表到主表插入或更新审计和日志记录

MySQL - 按 GROUP_CONCAT 分组

sql-server - 返回 id 并拆分逗号分隔值的 SQL 语句

sql-server - 有没有办法让这个UDF具有确定性?

mysql - 从第一个 gridview 显示第二个 gridview 的值