关于触发器和存储过程的问题,新手求指点~!
create database stuuse stu
drop table info
drop table success
create table info--学生信息表
(
stuID int identity(1,1) primary key not null,
stuname char(20) not null,
stuage int not null,
)
go
create table success--课程成绩表
(
stuID int not null,
studis char(20) not null,
stfen int not null,
foreign key (stuID) references info(stuID)
)
go
select * from info --select * from stu_success
select * from success
insert info values ('张三','17')
insert info values ('李四','16')
insert info values ('王五','16')
insert success values ('1','语文','90')
insert success values ('1','数学','90')
insert success values ('1','英语','90')
insert success values ('1','理综','120')
insert success values ('2','语文','90')
select stuname from info
drop procedure stuinser/*删除存储过程*/
create procedure stuinser/*新建存储过程*/
as
select i.stuID,stuname,studis,stfen
from info i inner join success s
on i.stuID = s.stuID
drop trigger stuinsert/*删除触发器*/
create trigger stuinsert/*新建触发器*/
on success for insert
as
declare @msg varchar(50)
--select *from inserted
/*select @msg = stu_dis*/
EXEC stuinser
代码有点乱,我主要是想熟悉一下触发器和存储过程,现在的问题是这样的,每次对课程成绩表进行数据插入操作的时候,都会执行一次触发器stuinsert,然后触发器stuinsert就会调用存储过程stuinser,但是现在insert success values ('1','语文','90')这样的语句可以重复很多次,就是说同一个人,在同一门课上可以有很多不同的成绩,这显然是不对的。能不能在执行触发器的时候,验证插入的信息是否已经存在,如果存在(就是已经有一条('1','语文','90')的数据,然后插入数据是('1','语文','x'))就回到数据插入之前的状态。还有弱弱的问一句,SQL的触发器和存储过程是不是就相当于java的事件和方法