Sql 表删除后是否保留外键?

Sql 表删除后是否保留外键?,sql,ssms,Sql,Ssms,所以这里有一个有趣的故事给你。。。我正在复制一个完整的数据库(db1),并将结构从一个数据库复制到另一个数据库(db2),在此之前,我决定尝试从db2中删除所有表。我做了通常的spmsforeachtable'更改表?不检查约束所有“,然后sp\msforeachtable”DROP TABLE?,更让我沮丧的是,它删除了可能6个表的所有存储。这些表似乎仍然有外键引用。我做了一次搜索,找到了这个,它告诉我如何查找并尝试删除那些外键引用 有趣的是:在尝试使用该信息删除它们时,我被告知ssms找不到

所以这里有一个有趣的故事给你。。。我正在复制一个完整的数据库
(db1)
,并将结构从一个数据库复制到另一个数据库
(db2)
,在此之前,我决定尝试从db2中删除所有表。我做了通常的
spmsforeachtable'更改表?不检查约束所有“
,然后
sp\msforeachtable”DROP TABLE?
,更让我沮丧的是,它删除了可能6个表的所有存储。这些表似乎仍然有外键引用。我做了一次搜索,找到了这个,它告诉我如何查找并尝试删除那些外键引用

有趣的是:在尝试使用该信息删除它们时,我被告知ssms找不到该对象,因为它不存在或我没有权限。外键引用来自我以前删除的表


这怎么可能?我到底该如何从这里进步

我不知道你在“试图删除它们时”中所说的它们是什么意思。如果您试图从系统表中删除外键,那肯定是个错误

我猜你现在可以放下最后6张桌子了

假设我们有两张桌子A和B

create table A (a int) 
create table B(b int, foreign key (b) references (A.a))
我们试着放下桌子<代码>删除表A将失败,因为B使用声明的外键引用它。但是我们可以自由地
删除表B
,因为A不在乎它是否不再被引用


因此,在第一次传递之后,一个
DROP
失败,一个成功,留下一个表,现在没有FK引用。再试一次,瞧<代码>删除表A现在可以工作了

它们指的是外键,它们是我在那里发布的链接中找到的查询结果ALTER TABLE table1 DROP CONSTRAINT FK_whatever1'显然这些不是真名。。。无论如何,我会尽量解释得更好。上面的语句是我在链接中找到的查询结果。这里的问题是FK_whatever1仍然存在,但是table1不存在。现在,我在尝试运行该语句时出现以下错误:“找不到对象table1,因为它不存在或者您没有权限”。表1被删除了,FK是如何存在的?另一个小更新,在查询Sys.Objects中的对象(如table_blah)时,我收到了一个列表,其中包含多个默认约束对象、外键约束对象、主键约束对象、,尽管在树结构中不再可见,尽管我无法使用select语句查看,但表本身仍然存在。请考虑此问题已解决!我只是简单地删除了db1并恢复了db2的一个副本来代替db1。