首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL DROP TABLE外键约束

SQL DROP TABLE外键约束
EN

Stack Overflow用户
提问于 2009-11-22 01:15:07
回答 12查看 384.7K关注 0票数 173

如果我想像这样删除数据库中的所有表,它会处理外键约束吗?如果不是,我该如何处理它呢?

代码语言:javascript
复制
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]
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-11-22 01:24:51

不,这不会删除您的表,如果确实有外键引用它。

要获取引用您的表的所有外键关系,您可以使用以下SQL (如果您使用的是SQL Server2005或更高版本):

代码语言:javascript
复制
SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('Student')

如果有的话,使用下面的语句,您可以创建SQL语句来实际删除这些FK关系:

代码语言:javascript
复制
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')
票数 365
EN

Stack Overflow用户

发布于 2009-11-22 01:24:21

如果你先删除“孩子”表,外键也会被删除。如果您首先尝试删除"parent“表,您将得到一个”无法删除对象'a‘,因为它被外键约束引用“。错误。

票数 26
EN

Stack Overflow用户

发布于 2014-10-14 04:04:56

这是使用sp_MSdropconstraints过程正确删除所有表的另一种方法。我能想到的最短的代码是:

代码语言:javascript
复制
exec sp_MSforeachtable "declare @name nvarchar(max); set @name = parsename('?', 1); exec sp_MSdropconstraints @name";
exec sp_MSforeachtable "drop table ?";
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1776079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档