SQLServer 外键检查已禁用,但仍无法删除表



我有一个SQLSERVER数据库,我想从中删除表。该表具有FK的约束,但是在这种情况下,这没关系,因为当我重新填充表时,FKS将被正确更换。

我已经完成了EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all",它给出了一条消息:sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINTS all" succeded,但是当我尝试丢弃表时,我会收到以下SQL错误:SQL Error: Could not drop object 'myTable' because ti is referenced by a FOREIGN KEY constraint

该命令是否应该不影响我的整个数据库,并允许我在没有问题的情况下丢下表?我还尝试执行EXEC sp_msforeachtable "ALTER TABLE myTable NOCHECK CONSTRAINT all",这会导致相同的错误。

noCheck禁用约束,以免执行它们。这将使您可以删除数据而不会违反约束。

丢弃表将使约束定义无效。您不能具有引用不存在的表的约束。在存在约束时,您也无法从表中删除引用的列。

如果您要重新流动表,只需删除表数据并重新加载它。如果您绝对必须放下并重新创建桌子,则需要包括Drop&还为您的外键约束创建语句。

请注意,如果您禁用约束,则需要使用检查检查(是两次(。第一个检查打开了新数据的约束,第二个告诉SQL验证现有数据。如果您只做一个,则将检查新数据,但是现有数据将不会被"信任",这可能会影响SQL如何利用查询中的FK参考。

该命令是否应该不影响我的整个数据库并允许我 在没有问题的情况下放桌子?

否。什么是Nocheck状态都没关系;如果有一个引用目标表的FK约束,则无法删除该目标表。

丢弃表的唯一方法是首先删除引用它的FK约束。

最新更新