在SQL Server2005中如何删除主表中有外键关系的记录呢?自己写了个触发器,执行没效果,求教各位牛人:

代码如下:createtriggerstudent_deleteonstudentfordeleteasbegindeletefromstudent_coursewher... 代码如下:
create trigger student_delete
on student
for delete
as begin
delete
from student_course
where sno in(
select distinct sno
from deleted);
end;
delete
from student
where sno = '9191';
select *
from student;
(注:student表是主表,student_course表是从表,外键关系是sno)
展开
 我来答
wangzhiqing999
2011-05-02 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3323万
展开全部
如果建立了默认的外键。
也就是那种,如果 子表有数据,主表相关的记录不让删除的那种。

这种情况下,当你
delete
from student
where sno = '9191';

数据库首先去检查外键,发现存在有 sno = '9191' 的 student_course 的数据
然后直接提示你,说不能删除。
触发器都没有机会被触发啊......

如果只是要实现 删除主表中有外键关系的记录
创建外键的时候,加一个 ON DELETE CASCADE 的选项就好了。

参考资料: http://hi.baidu.com/wangzhiqing999/blog/item/969f70fa84e2873e5d600821.html

7g18jxso7
2011-05-03 · TA获得超过1328个赞
知道小有建树答主
回答量:1442
采纳率:100%
帮助的人:0
展开全部
create or replace trigger tri
before update on table1
for each row
declare
tempnum number;
begin
select count(*) into tempnum from table2 where name=:new.name
if tempnum>0 then
rollback;
end if;
end tri;

没有测试,只是一个想法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
muzithere
2011-05-02
知道答主
回答量:21
采纳率:0%
帮助的人:9.1万
展开全部
上面说得很对啊。如果你才开始弄数据表这些的阶段。就可以创建的时候加级联删除的设置。
如果没有进行这样的设置。你在删除数据的时候要删除主表的记录才能删除子表的记录。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式