注册 登录
编程论坛 SQL Server论坛

触发器如何写

chenxiang 发布于 2007-09-20 19:56, 684 次点击

请教个触发器的写法
student表结构
id ,name,mark


未设置主键和标识

当执行insert数据到student时,插入的id值必须为原student表最大id+1,如果id不符合这个条件,则将插入的id改为原表最大id+1,name,mark属性不变

3 回复
#2
purana2007-09-20 20:17
create table student(
id int not null,
name varchar(30) collate chinese_prc_ci_as not null,
mark varchar(30) collate chinese_prc_ci_as null
)
go
if exists(select name from sysobjects
where name='tri_test' and type='tr')
drop trigger tri_test
go

create trigger tri_test on dbo.student
instead of insert
as
declare @id_source int
declare @id_target int
declare @name varchar(30)
declare @mark varchar(30)

select @id_target=id,@name=name,@mark=mark from inserted
select @id_source=max(id) from student

if @id_source=0 or @id_source=null
select @id_source=0

if (@id_source+1)!=@id_target
select @id_target=@id_source+1
begin
insert into student values(@id_target,@name,@mark)
if @@rowcount=0
begin
print 'error'
rollback tran
end
end
go
#3
chenxiang2007-09-20 23:52

大虾,从这段代码学到很多东西,万分感谢

#4
topcool2007-09-21 17:34

版主强啊~一出手就是一段经典呢~~

1