sqlserver怎么删除有外键关联的数据? 5

 我来答
可以叫我表哥
推荐于2017-09-03 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464984
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部
--使用SYSREFERENCES
--删除外键
set xact_abort on
begin tran
DECLARE @SQL VARCHAR(99)
DECLARE CUR_FK CURSOR LOCAL FOR
SELECT 'alter table ['+ OBJECT_NAME(FKEYID) + '] drop constraint ' + OBJECT_NAME(CONSTID) FROM SYSREFERENCES
--删除所有外键
OPEN CUR_FK
FETCH CUR_FK INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_FK INTO @SQL
END
CLOSE CUR_FK
DEALLOCATE CUR_FK
-- 删除所有表
DECLARE CUR_TAB CURSOR LOCAL FOR
SELECT 'DROP TABLE '+ NAME FROM SYSOBJECTS WHERE XTYPE='U' -- AND NAME LIKE 'xx%'
OPEN CUR_TAB
FETCH CUR_TAB INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_TAB INTO @SQL
END
CLOSE CUR_TAB
DEALLOCATE CUR_TAB
commit tran

--使用sys.foreign_keys
--disable and enable 外键
这里解释下 { CHECK | NOCHECK } CONSTRAINT

Specifies that constraint_name is enabled or disabled. This option can only be used with FOREIGN KEY and CHECK constraints. When NOCHECK is specified, the constraint is disabled and future inserts or updates to the column are not validated against the constraint conditions. DEFAULT, PRIMARY KEY, and UNIQUE constraints cannot be disabled.
上面的解释是,NOCHECK对应于disable, CHECK则对应于enable

select
'ALTER TABLE '+o.name+' NOCHECK CONSTRAINT '+fk.name+';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id=o.object_id)
具体会有多少条记录,取决于你的数据库里面,有多少个外键了。

然后复制结果, 粘贴出来执行. 就停用 外键约束了.

再删除数据

数据删除好了, 再启用外键约束

select
'ALTER TABLE ' + o.name + ' CHECK CONSTRAINT ' + fk.name + ';' AS Command
from
sys.foreign_keys fk
JOIN sys.all_objects o ON (fk.parent_object_id = o.object_id)

和前面的一样, 把查询出来的结果, 复制一下, 然后粘贴出来去执行.

--使用sys.foreign_key_columns

--查出外键
select name
from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where f.parent_object_id=object_id('表名')
--删除外键
alter table 表名 drop constraint 外简名
hsjxfmm
2012-04-14
知道答主
回答量:5
采纳率:0%
帮助的人:6324
展开全部
ALTER TABLE table_name NOCHECK CONSTRAINT FK_name
delete from table_name
删除数据并进行相关操作后,可以:
ALTER TABLE table_name CHECK CONSTRAINT FK_name
不过这样操作后不敢保证数据的完整性
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mwtcz
2010-11-13 · TA获得超过1322个赞
知道小有建树答主
回答量:1367
采纳率:50%
帮助的人:1032万
展开全部
几个选择,

一、先把外键关联的数据删掉,然后再删除主表里的数据。
二、启用sqlserver的级联删除,删除主表数据时候,会附带把外建表里的数据删除掉。

三、把外键关系去掉
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daxia1998
2010-11-13 · 超过24用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:0
展开全部
外键关联 是为了数据完整性,
要删的话,先删子,后删父。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thankstar
2010-11-16
知道答主
回答量:35
采纳率:0%
帮助的人:13.4万
展开全部
foreign key(字段名) references 主表名(字段名)
on delete cascade
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式