SQL 怎样删除有外键约束的表

在SQLServer2008中,执行下面的命令Ifexists(select*FROMsysobjectsWHEREid=object_id(N'[dbo].[Stude... 在SQL Server 2008中,执行下面的命令
If exists
(
select * FROM sysobjects WHERE id = object_id(N'[dbo].[Students]') and OBJECTPROPERTY(id, N'IsUserTABLE') = 1
)
DROP TABLE [dbo].[Students];
提示无法删除,有外键约束。现在我想删除掉Students表,不管有没有外键约束,就算有,我也不用知道是那个表引用了它,约束名是什么。请问怎么用SQL语句实现呢?
先谢谢tanshuangcq的回答,只是,现在不知道哪个是外键表,或者有什么方法可以找到这个外键表呢?只能用SQL语句操作。
谢谢feixianxxx的回答。可能我没表达清楚,现在Students表对我来说完全是陌生的,我不知道里面有些什么列,更不知道那些列作了外键。我只想把这个表Drop掉。
展开
 我来答
大野瘦子
高粉答主

2018-12-13 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.6万
展开全部

1、自动生成所有的DROP语句,将其中的MyDatabaseName替换成你的数据库名称:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')

FROM information_schema.tables

WHERE table_schema = 'MyDatabaseName'; 

2、然后,在生成的代码前后添加下面设置FOREIGN_KEY_CHECKS变量的语句:

SET FOREIGN_KEY_CHECKS = 0

-- DROP语句

SET FOREIGN_KEY_CHECKS = 1;

扩展资料:

外键约束可双击关系线添加外键约束,外键约束有四种不同的选项:CASCADE, SET NULL, NO ACTION, RESTRICT。

1、CASCADE : 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。[ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。]

2、SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。[注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。]

3、NO ACTION: InnoDB拒绝删除或者更新父表。

4、RESTRICT: 拒绝删除或者更新父表。[指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。]

badkano
2015-10-01 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885371
团长

向TA提问 私信TA
展开全部

删除外键约束的表,首先要删除外键关联,然后才可以删除表。

如:

1、创建表author :

CREATE TABLE [dbo].[author] 
([ID] [bigint] NOT NULL PRIMARY KEY,
[AuthorName] [char] (10) NULL,
[address] [char] (480) NULL,
 [introduction] [ntext] NULL)

2、创建myBBS表:

CREATE TABLE [dbo].[myBBS] (  
[ID] [bigint] IDENTITY (1, 1) NOT NULL,  
[authorId] [bigint] NOT NULL,  
[Title] [char] (40) NULL,  
[Date_of_Created] [datetime] NULL,  
[Abstract] [char] (480) NULL,  
[Content] [ntext] NULL)

3、创建外键关系:

alter table dbo.mybbs add constraint FK_mybbs_author  
foreign key (authorId)  
references dbo.author([id]) ON UPDATE CASCADE ON DELETE CASCADE

4、在删除表前,要删除外键,语法如下:

alter table dbo.mybbs drop constraint FK_mybbs_author

5、然后再删除表:

drop table [dbo].[myBBS]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feixianxxx
2010-08-02 · TA获得超过2202个赞
知道大有可为答主
回答量:1273
采纳率:100%
帮助的人:1759万
展开全部
先找出你的外键所在用下面的语句:
--查询一个表的所有外键:

SELECT 主键列ID=b.rkey
,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
,外键表ID=b.fkeyid
,外键表名称=object_name(b.fkeyid)
,外键列ID=b.fkey
,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
,级联更新=ObjectProperty(a.id,'CnstIsUpdateCascade')
,级联删除=ObjectProperty(a.id,'CnstIsDeleteCascade')
FROM sysobjects a
join sysforeignkeys b on a.id=b.constid
join sysobjects c on a.parent_obj=c.id
where a.xtype='f' AND c.xtype='U'
and object_name(b.rkeyid)='Students'

然后删除对应的外键~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e829334c0
2010-08-02 · TA获得超过473个赞
知道小有建树答主
回答量:1066
采纳率:0%
帮助的人:835万
展开全部
必须要先删除外键表,才可删除主表
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式