例如一个学生表和一个学生成绩表,如果删除某个学生,那么对应的学生成绩表里面该学生所有的成绩要删除,我写的触发器如下create trigger mytrigger BEFORE delete on [dbo].[student]for each rowbegin
delete score
from stdudent,score
where score.sname=stdudent.sname
end
delete score
from stdudent,score
where score.sname=stdudent.sname
end
解决方案 »
- 如何用 check 设置邮箱的格式
- 求一条SQL语句
- 一个数据库的连接问题。请教,在线等。急
- 请教个问题,求个方法
- 连接不到服务器数据库!~错误:服务器:消息14, 级别 16 ,状态1
- SQL SERVER 2000 OpenRowSet-存储过程中动态SQL语句问题
- 有个真正的SQL基础问题,但估计新手多半不了解,特在这向高手请教!
- SQL Server 2000在winxp中安装不上该怎么办?
- ★★★快来抢300分★★★:在sql server里创建trigger时,怎么把表用参数表示出来??
- sql语句go附近出现语法错误
- sql server 里面代理服务启动不了,什么原因呢???、
- 一个非常纠结的主键。是否可以实现
Create Or Replace Trigger mytrigger Delete On student
For Each Row
Begin
Delete From score
Where sname = :Old.sname ;
End ;
/
如果是oracle,应该这么写。其是 :old 代表你要删除的那行,可以看看有关触发器的资料。
For Each Row
Begin
Delete From score
Where sname = :Old.sname ;
End ;
/
我这只是为了学习下触发器,所以楼上的有提到用级联删除的,那种方法当然可以,但我是想通过触发器实现。之前我写的删除触发器是没有用BEFORE,这个时候就会出现这些的问题,它先在学生表中删除掉学生表里的记录,然后再在成绩表里面去找,如果能和学生表的通过学生名称关联上的,那么就删除成绩表里面的记录,这样导致结果错误。我的目的是在学生表里删除哪个学生,那么相应的删除该学生的成绩。上面我写的触发器都编译通不过,请教各位大侠
ON [dbo].[department]
FOR DELETE
AS
begin
delete employees
from employees e, deleted d
where e.did = d.did
end
GO
CREATE TRIGGER [tg_update_department] ON [dbo].[department]
FOR UPDATE
AS
if UPDATE(did)
begin
update employees
set did = i.did
from employees e, deleted d, inserted i
where e.did = d.did
end
GO