如果我想像这样删除数据库中的所有表,它会处理外键约束吗?如果不是,我该如何处理它呢?
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]
发布于 2009-11-22 01:24:51
不,这不会删除您的表,如果确实有外键引用它。
要获取引用您的表的所有外键关系,您可以使用以下SQL (如果您使用的是SQL Server2005或更高版本):
SELECT *
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')
如果有的话,使用下面的语句,您可以创建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')
发布于 2009-11-22 01:24:21
如果你先删除“孩子”表,外键也会被删除。如果您首先尝试删除"parent“表,您将得到一个”无法删除对象'a‘,因为它被外键约束引用“。错误。
发布于 2014-10-14 04:04:56
这是使用sp_MSdropconstraints
过程正确删除所有表的另一种方法。我能想到的最短的代码是:
exec sp_MSforeachtable "declare @name nvarchar(max); set @name = parsename('?', 1); exec sp_MSdropconstraints @name";
exec sp_MSforeachtable "drop table ?";
https://stackoverflow.com/questions/1776079
复制相似问题