如何删除外键引用的唯一索引?

时间:2009-12-24 10:37:33

标签: sql sql-server sql-server-2000 foreign-keys indexing

我有一张桌子,我们称之为Users。此表具有名为Id的主键。尽管将Id作为主键(唯一聚簇),但它在同一列(Id)上具有其他索引(唯一的非聚簇)。

我想删除此约束,但是外键引用了这个唯一的非聚簇索引,并且出现The constraint ... is being referenced by table...错误。

删除此类索引的最佳方法是什么?您是否有任何脚本可以删除,执行某些操作,并在特定表中的特定列上重新创建外键?有很多外键,所以如果我能自动完成它会很好。我可以使用INFORMATION_SCHEMA和其他系统对象来提取有关这些键的信息,但我不想写,已经写过或者可以用其他方式完成。

2 个答案:

答案 0 :(得分:3)

为了删除外键引用的非聚簇索引,必须先删除外键约束。

查看SQL Server Central上的海报中提供的以下文档。他们可能需要对您的“确切”要求进行一些调整,但是它们提供了编写脚本然后重建外键的基础。

Scrip out Foreign Keys

答案 1 :(得分:1)

双指数方法有意义:

  • 第二个索引可能比聚集索引小得多,并且更容易适合内存
  • 第二个索引可能包含一系列有益于特定查询的列

要删除第二个索引,您必须先删除所有引用它的外键。以下是the script我用来放弃&的链接重新创建外键。