ms-sql 2008触发器 问题

cosmosfang 2011-05-28 09:07:48
歌曲表(sing): 主键 sno,其余字段若干
歌手表(singer):主键 cno,其余字段若干
专辑表(album): 主键 ano,其余字段若干
三者联系表(csrel):sno、cno ,ano
外键引用 sno外键引用sing(sno),cno外键引用singer(cno),ano外键引用album(ano)

请问在删除singer表记录的时候,如何实现触发器能够删除其它表中所有的相关记录。
注:一首歌可以有多个歌手唱

谢谢!

...全文
75 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cosmosfang 2011-05-29
  • 打赏
  • 举报
回复
级联删除也不可以,尽管CSREL中的记录会被级联删掉,但是歌曲表(sing)中的记录不会被删掉
cosmosfang 2011-05-29
  • 打赏
  • 举报
回复
CREATE TRIGGER trig_name
ON singer
FOR DELETE
这些做法都是不可以的,否则俺也不来问了
删除的时候就已经不能删除了,因为删除时候会和外键冲突。
我考虑的使用instead of触发器,但是由于一首歌可以有多个歌手唱,所以不能单纯地把其对应的歌曲删除,只有但这首歌没有其他歌手唱的时候才能删除
sz_vcp2007 2011-05-28
  • 打赏
  • 举报
回复

CREATE TRIGGER trig_name
ON singer
FOR DELETE
AS
BEGIN
PRINT 'BEFORE DELETE...'
SELECT * FROM sing
SELECT * FROM singer
SELECT * FROM album
SELECT * FROM dbo.csrel
PRINT 'AFTER DELETE...'
DELETE FROM csrel WHERE cno = (SELECT cno FROM deleted)
DELETE FROM sing WHERE sno = (SELECT a.sno FROM csrel a INNER JOIN deleted b ON a.cno = b.cno)
DELETE FROM album WHERE ano = (SELECT a.ano FROM csrel a INNER JOIN deleted b ON a.cno = b.cno)
END


上面的写法报错,哪位大侠帮忙看看
消息 547,级别 16,状态 0,第 1 行
DELETE 语句与 REFERENCE 约束"FK_singer_cno"冲突。该冲突发生于数据库"TESTH",表"dbo.csrel", column 'cno'。
语句已终止。
--小F-- 2011-05-28
  • 打赏
  • 举报
回复
用触发器可以这样
create trigger my_tri on singer
for delete
as
begin
delete sing from sing a, csrel c,deleted d where a.sno=c.sno and d.cno=c.cno
delete album from album a,csrel c,deleted d where a.ano=d.ano and d.cno=c.cno
end
叶子 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cosmosfang 的回复:]
要求是要做触发器,这样在删除singer时就可以一起删除所有关联数据了
[/Quote]

create trigger 触发器名称  
on singer   
for delete   
as   
declare @cno varchar(20)
select @cno=cno from deleted
delete from csrel where cno=@cno
--小F-- 2011-05-28
  • 打赏
  • 举报
回复
有主外键 可以用级联删除
cosmosfang 2011-05-28
  • 打赏
  • 举报
回复
要求是要做触发器,这样在删除singer时就可以一起删除所有关联数据了
叶子 2011-05-28
  • 打赏
  • 举报
回复
不需要用触发器

多个删除一起就可以了

delete from...
delete from...

根据参数,先删除从表的,后删除主表的。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧