即使我正在删除并试图删除表,我得到错误,
ALTER TABLE [dbo].[Table1] DROP CONSTRAINT [FK_Table1_Table2]
GO
DROP TABLE [dbo].[Table1]
GO
Run Code Online (Sandbox Code Playgroud)
错误
消息3726,级别16,状态1,行2无法删除对象'dbo.Table1',因为它由FOREIGN KEY约束引用.
使用SQL Server 2012
我使用sql server 2012生成了脚本,所以sQL服务器给了我错误的脚本吗?
rjs*_*jso 25
不确定我是否正确理解你想要做什么,很可能Table1在另一个表中被引用为FK.
如果你这样做:
EXEC sp_fkeys 'Table1'
Run Code Online (Sandbox Code Playgroud)
(这取自我如何列出引用SQL Server中给定表的所有外键?)
这将为您提供"Table1"主键为FK的所有表.
删除表中存在的约束,这不是删除表本身的必要步骤.删除引用'Table1'的每个可能的FK是.
至于问题的第二部分,SQL Server自动脚本在很多方面都是盲目的.很可能是阻止您删除Table1的表被删除或者根本没有被脚本更改.RedGate有一些工具可以帮助那些级联删除(通常在你试图删除一堆表时),但它不是防弹的,而且相当昂贵.http://www.red-gate.com/products/sql-development/sql-toolbelt/
Orl*_*era 11
首先,你需要放弃你的FK.
我建议你看看这个堆栈溢出帖子,非常有趣.它被称为:SQL DROP TABLE外键约束
有关如何执行此过程的良好解释.
我会引用一个回复:
.....如果确实存在引用它的外键,则不会丢弃您的表.
要获取引用表的所有外键关系,可以使用此SQL(如果您使用的是SQL Server 2005及更高版本):
SELECT *
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')
SELECT
'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) +
'.[' + OBJECT_NAME(parent_object_id) +
'] DROP CONSTRAINT ' + name
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')
Run Code Online (Sandbox Code Playgroud)