由于外键约束强制执行,无法删除索引

Kar*_*ski 9 sql t-sql indexing sql-server-2008

我不能删除索引,因为有些表将它用于外键

消息3723,级别16,状态6,行1索引'tbl1.ix_cox'上不允许显式DROP INDEX.它用于FOREIGN KEY约束实施.

我试图在丢弃之前先禁用索引

ALTER INDEX ix_cox On tbl1
DISABLE
Go
Run Code Online (Sandbox Code Playgroud)

但仍然无法放弃它.

我真的需要删除那些使用该索引的表上的外键吗?因为它大约有30张桌子.

小智 12

如果创建索引定义PRIMARY KEY或UNIQUE约束(https://docs.microsoft.com/en-us/sql/t-sql/statements/drop-index-transact-sql?),您将获得相同的异常. view = sql-server-2017).

在这种情况下,简单的解决方案是使用ALTER-TABLE命令:

ALTER TABLE tbl1 DROP CONSTRAINT ix_cox
Run Code Online (Sandbox Code Playgroud)


Rah*_*hul 0

您可以暂时禁用 FK 约束 -> 删除索引 -> 重新启用约束,例如

ALTER TABLE your_fk_table NOCHECK CONSTRAINT constraint_name

drop index ids_name

ALTER TABLE your_fk_table CHECK CONSTRAINT constraint_name
Run Code Online (Sandbox Code Playgroud)

  • 即使没有检查约束,对我来说也是同样的错误。 (3认同)