不用触发器实现级联删除
这里是一张表:(可直接运行)
--级联删除测试
use master
go
if exists(select * from sysdatabases where name = 'DelTest')
drop database DelTest
--0.创建数据库------------------
create database DelTest
go
use DelTest
go
--新闻类型表
create table [NewsType](
NewsType_id int not null identity(1,1) primary key, --ID自动增长
NewsType_Name nvarchar(50),--类型名称
)
insert into [NewsType](NewsType_Name) values('新闻中心')
insert into [NewsType](NewsType_Name) values('时实签约')
insert into [NewsType](NewsType_Name) values('活动公告')
select * from [NewsType]
--新闻内容表
create table [News](
News_id int not null identity(1,1) primary key, --ID自动增长
News_Tiele nvarchar(100),--标题
News_Abstract nvarchar(300),--新闻简介
News_Content text,--内容
NewsType_id int foreign key(NewsType_id) references [NewsType] (NewsType_id) ,--引用新闻类型表
)
insert into [News] values('测试删除','测试删除','测试删除',1)
insert into [News] values('测试删除','测试删除','测试删除',1)
insert into [News] values('测试删除','测试删除','测试删除',2)
insert into [News] values('测试删除','测试删除','测试删除',2)
insert into [News] values('测试删除','测试删除','测试删除',2)
insert into [News] values('测试删除','测试删除','测试删除',3)
insert into [News] values('测试删除','测试删除','测试删除',3)
insert into [News] values('测试删除','测试删除','测试删除',3)
insert into [News] values('测试删除','测试删除','测试删除',3)
insert into [News] values('测试删除','测试删除','测试删除',1)
select * from news
------------------
要删除类型为1的所有新闻
delete from [Newstype] where newstype_id = 1(有外键引用,不能删除)
解决办法:
1.如果表已经建好,先删除外键(外键名称可以在表结构中查看)
alter table News drop constraint FK__News__NewsType_i__7F60ED59
2.重新建立外键约束并且加入级联删除项
Alter TABLE News ADD CONSTRAINT [FK_NewsType_Id] FOREIGN KEY (NewsType_id) REFERENCES [NewsType](NewsType_id)
ON Update CASCADE ON Delete CASCADE --这句表示打开级联更新和级联删除,
现在就可以删除类型为1的所有新闻了
delete from [Newstype] where newstype_id = 1
当然,在建表的时候直接加入ON Update CASCADE ON Delete CASCADE 在外键行里
例:
NewsType_id int foreign key(NewsType_id) references [NewsType] (NewsType_id) ON Update CASCADE ON Delete CASCADE,--引用类型表