141 sql-server constraints foreign-keys drop-table database-table
如果我想像这样删除我的数据库中的所有表,它会处理外键约束吗?如果没有,我该如何处理?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 312
不,如果确实存在引用它的外键,这将不会丢弃您的表.
要获取引用表的所有外键关系,可以使用此SQL(如果您使用的是SQL Server 2005及更高版本):
SELECT *
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')
Run Code Online (Sandbox Code Playgroud)
如果有,在这里使用此语句,您可以创建SQL语句以实际删除这些FK关系:
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)
小智 39
在SQL Server Management Studio 2008(R2)和更高版本中,您可以右键单击
DB - >任务 - >生成脚本
选择要DROP的表.
选择"保存到新查询窗口".
单击"高级"按钮.
将Script DROP和CREATE设置为Script DROP.
将脚本外键设置为True.
单击确定.
单击下一步 - >下一步 - >完成.
查看脚本,然后执行.
Phi*_*ley 20
如果先删除"子"表,则外键也将被删除.如果您首先尝试删除"父"表,您将得到"无法删除对象'a',因为它是由FOREIGN KEY约束引用的." 错误.
小智 13
这是使用sp_MSdropconstraints过程正确删除所有表的另一种方法.我能想到的最短代码:
exec sp_MSforeachtable "declare @name nvarchar(max); set @name = parsename('?', 1); exec sp_MSdropconstraints @name";
exec sp_MSforeachtable "drop table ?";
Run Code Online (Sandbox Code Playgroud)