歌曲表(sing): 主键 sno,其余字段若干
歌手表(singer):主键 cno,其余字段若干
专辑表(album): 主键 ano,其余字段若干
三者联系表(csrel):sno、cno ,ano
外键引用 sno外键引用sing(sno),cno外键引用singer(cno),ano外键引用album(ano)请问在删除singer表记录的时候,如何实现触发器能够删除其它表中所有的相关记录。
注:一首歌可以有多个歌手唱谢谢!
歌手表(singer):主键 cno,其余字段若干
专辑表(album): 主键 ano,其余字段若干
三者联系表(csrel):sno、cno ,ano
外键引用 sno外键引用sing(sno),cno外键引用singer(cno),ano外键引用album(ano)请问在删除singer表记录的时候,如何实现触发器能够删除其它表中所有的相关记录。
注:一首歌可以有多个歌手唱谢谢!
解决方案 »
- 怎么又最简便的方法是用SQL SERVER2008?
- 想在表中加入一个不为空的字段,失败
- 求一SQL查询
- 使用select count的个数,如果没有,怎么用零代替?
- 关于sqlserver2000 Round函数的问题
- 急~~~~~~~~~~~~~~~~~~~请问在存储过程中异常怎么处理?
- 关于单据核销的数据处理
- 获取到不重复的数据后,又想直接统计相应的USERID里当天有多少条重复的数据.
- 请大家帮忙:有关PB7连接SQL SERVER2K:安装好了客户端,用程序能连接 但是Query Analyzer出错,下面是出错信息:
- sql server2000 不同版本之间可以覆盖master吗?
- SQL-Server2005出现“对于造型说明无效的字符”错误,求解!!!
- 远程连接sql2000已启用1433,但连接速度超慢,急求原因和解决方法
delete from...
根据参数,先删除从表的,后删除主表的。
create trigger 触发器名称
on singer
for delete
as
declare @cno varchar(20)
select @cno=cno from deleted
delete from csrel where cno=@cno
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
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'。
语句已终止。
ON singer
FOR DELETE
这些做法都是不可以的,否则俺也不来问了
删除的时候就已经不能删除了,因为删除时候会和外键冲突。
我考虑的使用instead of触发器,但是由于一首歌可以有多个歌手唱,所以不能单纯地把其对应的歌曲删除,只有但这首歌没有其他歌手唱的时候才能删除