SQL Server 2005无法删除约束,“无法删除约束。请参阅前面的错误”。

8
我正在尝试在数据库表上删除一个约束,类似于:
ALTER TABLE MyTable drop CONSTRAINT FK_MyTable_AnotherTable

但是执行过程一直在运行。如果我停止它,会看到以下内容:
Msg 3727, Level 16, State 0, Line 2
Could not drop constraint. See previous errors.

网络搜索会出现各种页面,但请注意约束条件必须正确命名,我正在尝试使用正确的名称移除它。

4个回答

4

我在使用 SQL Server 2008 R2 时遇到了同样的问题,以下代码解决了我的问题,希望对其他人也有用 :)

    Alter Table [Table Name]
    DROP Column [Column Name]

我可以知道为什么我的答案被评为-1吗?如果您能纠正我,我会很高兴的。 - Zeeshan Ajmal
2
希望你已经得到了你想知道的答案。我认为主题所有者不想删除任何列,他只是想删除外键(可能是为了更改列定义)。 - NPC

2

请确认您尚未删除该约束,例如:

SELECT OBJECT_ID('FK_MyTable_AnotherTable')

如果返回值为null,则说明您的约束已不存在。这可能是错误信息的原因。

没有移除约束,我已经尝试了您的方法以及其他方法,它仍然存在。这也会阻止我删除相关列。 - DannykPowell
@DannykPowell:object_id('FK_MyTable_AnotherTable','F')显示什么? - Andomar
看到我的回答了吗?我先通过禁用约束条件进行了排序 - 感谢您的回答@Andomar。 - DannykPowell

2

我找到了一种方法来解决这个问题,尽管我不明白为什么需要这样做。

通过先禁用约束条件,我已经能够删除它:

ALTER MyTable NOCHECK CONSTRAINT FK_MyTable_AnotherTable

下拉操作完成后,一切都正常。

仍然欢迎任何关于为什么需要这样做的评论。


我想删除一个既不是主键也不是外键的列,但我一直收到相同的错误提示。我尝试了你提供的解决方案,但它并没有起作用。你有什么其他的想法吗? - Zeeshan Ajmal

0

我曾经遇到过同样的问题。

原因是在我的游标语句中犯了一个错误,它正在迭代一些我要删除的约束条件。因此,当实际上在同一事务中删除该约束条件时,就会发生此错误。然后我进行了回滚并检查它是否存在:它确实存在(当然,在回滚之后!)。

在删除时检查它是否真的存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接