日期:2014-05-17  浏览次数:20394 次

请教一个SQLSERVER 中级联删除的例子
已经修改了表
use LkMusicDB
alter table RecordLabel add constraint fk_RecordlabelidAndAddressid 
foreign key (addressid) references Address(addressid)
on update no action 
on delete cascade;


打算在delete from [LkMusicDB].[dbo].[RecordLabel] where recordlabelid =20005 时会级联删除
Address 表中的对应的行,

增加级联是成功了

为什么删除的时候 还是只会删除RecordLabel  不会删除Address 中的那?

------解决方案--------------------
引用:
已经修改了表
use LkMusicDB
alter table RecordLabel add constraint fk_RecordlabelidAndAddressid 
foreign key (addressid) references Address(addressid)
on update no action 
on delete cascade;


打算在delete from [LkMusicDB].[dbo].[RecordLabel] where recordlabelid =20005 时会级联删除
Address 表中的对应的行,

增加级联是成功了

为什么删除的时候 还是只会删除RecordLabel  不会删除Address 中的那?


你弄反了把,这个级联删除,只能是删除主表的记录时,级联删除子表的记录。

你现在的主表是Address,而子表是RecordLabel。

所以只能实现删除address的记录时,自动删除RecordLabel的记录。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:


foreign key (addressid) references Address(addressid)

foreign key (addressid)  是因为我在RecordLabel这张表里有addressid列 并且是外键
references Address(addressid) 是Address表中addressid是主键!
请问这样有错吗?
能帮我改改吗?


你写的是对的。

打算在delete from [LkMusicDB].[dbo].[RecordLabel] where recordlabelid =20005 时会级联删除
这个实现不了。

只能实现 delete from [LkMusicDB].[dbo].[address] where addressid=xxx 时,自动把子表的addressid = xxx的记录删除掉哈


请问 要实现我的那种怎么办 。。 触发器我会搞


那就给表RecordLabel建个delete触发器:

类似于这样:

delete from address
from inserted i
where i.addressid = address.addressid