在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) 展开
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) 展开
3个回答
展开全部
如果建立了默认的外键。
也就是那种,如果 子表有数据,主表相关的记录不让删除的那种。
这种情况下,当你
delete
from student
where sno = '9191';
数据库首先去检查外键,发现存在有 sno = '9191' 的 student_course 的数据
然后直接提示你,说不能删除。
触发器都没有机会被触发啊......
如果只是要实现 删除主表中有外键关系的记录
创建外键的时候,加一个 ON DELETE CASCADE 的选项就好了。
也就是那种,如果 子表有数据,主表相关的记录不让删除的那种。
这种情况下,当你
delete
from student
where sno = '9191';
数据库首先去检查外键,发现存在有 sno = '9191' 的 student_course 的数据
然后直接提示你,说不能删除。
触发器都没有机会被触发啊......
如果只是要实现 删除主表中有外键关系的记录
创建外键的时候,加一个 ON DELETE CASCADE 的选项就好了。
参考资料: http://hi.baidu.com/wangzhiqing999/blog/item/969f70fa84e2873e5d600821.html
展开全部
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;
没有测试,只是一个想法
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;
没有测试,只是一个想法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面说得很对啊。如果你才开始弄数据表这些的阶段。就可以创建的时候加级联删除的设置。
如果没有进行这样的设置。你在删除数据的时候要删除主表的记录才能删除子表的记录。
如果没有进行这样的设置。你在删除数据的时候要删除主表的记录才能删除子表的记录。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询