求助如果在sqlserver2005中级联删除主从表的记录?

kncomputer 2008-03-28 01:28:34
比如:
订单表:t_order
o_id  username  dtime   ……
1    dd     2008-1-1  ……
----------------

订单明细表:t_order_detail
od_id mainID prod  ……
1   1   CPU
2   1   硬盘  ……

设定关系:t_order.o_id = t_order_detail.mainID

如果是sql server 2000的话,只要设定关系“级联删除”,那么,当删除t_order表的o_id=1时,t_order_detail的mainID=1的记录也会自动删除。

天啊!在sql server 2005中,却取消了此功能!
当试图删除t_order表的o_id=1时,总是提示什么约束冲突。

我知道,要删除t_order表的o_id=1的记录时,先行删除t_order_detail的相关记录就可以。但这样无疑增加了程序编写量。
我又知道,可以使用触发器来帮助。可是写了还是不行:
CREATE TRIGGER [dbo].[tr_order]
ON [dbo].[t_order]
for DELETE
AS
BEGIN
declare @id int
select @id=o_id from deleted
delete from t_order_detail where mainid=@id

END

还是一样的提示约束冲突!
请问:这触发器该怎么写才正确?
还有:还有没有更好的方法?

谢谢!万分感谢。
...全文
193 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ojuju10 2008-03-28


如果还不行,你就取消外键吧

建议不用外键,维护比较麻烦
回复
ojuju10 2008-03-28

CREATE TRIGGER [dbo].[tr_order]
ON [dbo].[t_order]
instead of DELETE --改改
AS
BEGIN
delete from t_order_detail where mainid
in (select id from deleted)


END

回复
pt1314917 2008-03-28

--取消外键关系。再建触发器

CREATE TRIGGER [dbo].[tr_order] ON [dbo].[t_order] for DELETE
AS
delete t_order_detail where mainid=(selecto_id from deleted)

回复
liangCK 2008-03-28
alter table t_order_detail
add constraint FK_t_order_detail foreign key(mainID) references t_order(o_id)
on delete cascade
go
回复
fcuandy 2008-03-28
2005不支持?

ON DELETE CASCADE

自己搜联级从书
回复
liangCK 2008-03-28
直接建外建约束就行.
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-28 01:28
社区公告
暂无公告