触发器的使用简单例子

Create Trigger tmp_translator       --触发器的名字
On t_translator_time                --在t_translator_time表中创建触发器
for Insert                          --为什么事件触发(insert,update,delete)
As                                  --事件触发后所要做的事情
DECLARE @REALNAME varchar(100)      --声明一个变量
SELECT @REALNAME=username From inserted  ----取得登记译者的姓名(系统表inserted,deleted)
Delete tmp_t_translator_detail WHERE realname=@REALNAME --执行删除操作

上面是简单的一个insert触发delete操作。下面是update来触发,update操作

-----下面的触发器
ALTER  Trigger time_translator
on t_translator
for Insert   ----当译者表中插入时
as 
--当前日期的星期天是哪天begin
declare @WeekDay datetime
declare @NowWeekDay nvarchar(20)
set @NowWeekDay=(--当前星期几
select datename(dw,getdate()))
set @WeekDay=(
select
case @NowWeekDay 
when '星期日' then getdate()
when '星期一' then dateadd(day,6,getdate())
when '星期二' then dateadd(day,5,getdate())
when '星期三' then dateadd(day,4,getdate())
when '星期四' then dateadd(day,3,getdate())
when '星期五' then dateadd(day,2,getdate())
when '星期六' then dateadd(day,1,getdate())
end
)
--当前日期的星期天是哪天end
Declare @RREALNAME varchar(100) 
SELECT @RREALNAME=[name] from inserted ----取得登记译者的姓名
begin
    declare @id int
    set @id = (select max(id) from t_translator)
    insert into tmp_t_translator_detail SELECT name, @id,     '', CONVERT(varchar(100), @WeekDay, 23),'上午(9:00 - 11:30)','未填','','未填','','未填','','未填','','未填','','未填','','未填','', major,master_major,master_research,doctor_major,doctor_research,postdoctor_major,postdoctor_research,way_to_charge,phone,home_telephone,mail,mail2,source1,target1,source2,target2,source3,target3,subject11,subject12,subject13,subject21,subject22,subject23,subject31,subject32,subject33,band11,band12,band21,band22,band31,band32,source4,source5,source6,target4,target5,target6,category_professional,category_word,passed,translator_id ,remark1,Product FROM inserted where name = @RREALNAME
    insert into tmp_t_translator_detail SELECT name, @id + 1, '', CONVERT(varchar(100), @WeekDay, 23),'下午(13:00 - 17:00)','未填','','未填','','未填','','未填','','未填','','未填','','未填','', major,master_major,master_research,doctor_major,doctor_research,postdoctor_major,postdoctor_research,way_to_charge,phone,home_telephone,mail,mail2,source1,target1,source2,target2,source3,target3,subject11,subject12,subject13,subject21,subject22,subject23,subject31,subject32,subject33,band11,band12,band21,band22,band31,band32,source4,source5,source6,target4,target5,target6,category_professional,category_word,passed,translator_id ,remark1,Product FROM inserted where name = @RREALNAME
    insert into tmp_t_translator_detail SELECT name, @id + 2, '', CONVERT(varchar(100), @WeekDay, 23),'晚间(17:00 - 次日9:30)','未填','','未填','','未填','','未填','','未填','','未填','','未填','', major,master_major,master_research,doctor_major,doctor_research,postdoctor_major,postdoctor_research,way_to_charge,phone,home_telephone,mail,mail2,source1,target1,source2,target2,source3,target3,subject11,subject12,subject13,subject21,subject22,subject23,subject31,subject32,subject33,band11,band12,band21,band22,band31,band32,source4,source5,source6,target4,target5,target6,category_professional,category_word,passed,translator_id ,remark1,Product FROM inserted where name = @RREALNAME
end
-----下面的触发器
ALTER  Trigger time_translator1
on t_translator
for Update   ----当译者表中插入时
as 
--当前日期的星期天是哪天begin
declare @WeekDay datetime
declare @NowWeekDay nvarchar(20)
set @NowWeekDay=(--当前星期几
select datename(dw,getdate()))
set @WeekDay=(
select
case @NowWeekDay 
when '星期日' then getdate()
when '星期一' then dateadd(day,6,getdate())
when '星期二' then dateadd(day,5,getdate())
when '星期三' then dateadd(day,4,getdate())
when '星期四' then dateadd(day,3,getdate())
when '星期五' then dateadd(day,2,getdate())
when '星期六' then dateadd(day,1,getdate())
end
)
--当前日期的星期天是哪天end

begin
Declare @RREALNAME varchar(100) 
SELECT @RREALNAME=[name] from inserted ----取得登记译者的姓名
if((select count(*) from t_translator_time where username=@RREALNAME and week= CONVERT(varchar(100), @WeekDay, 23)))=0  --如果在临时表和时间登记中都没有记录
     update t set t.major=b.major,t.master_major=b.master_major,t.master_research=b.master_research,t.doctor_major=b.doctor_major,t.doctor_research=b.doctor_research,t.postdoctor_major=b.postdoctor_major,
t.postdoctor_research=b.postdoctor_research,t.way_to_charge=b.way_to_charge,t.phone=b.phone,t.home_telephone=b.home_telephone,t.mail=b.mail,t.mail2=b.mail2,t.source1=b.source1,t.target1=b.target1,t.source2=b.source2,t.target2=b.target2,
t.source3=b.source3,t.target3=b.target3,t.subject11=b.subject11,t.subject12=b.subject12,t.subject13=b.subject13,t.subject21=b.subject21,t.subject22=b.subject22,t.subject23=b.subject23,t.subject31=b.subject31,t.subject32=b.subject32,
t.subject33=b.subject33,t.band11=b.band11,t.band12=b.band12,t.band21=b.band21,t.band22=b.band22,t.band31=b.band31,t.band32=b.band32,t.source4=b.source4,t.source5=b.source5,t.source6=b.source6,t.target4=b.target4,t.target5=b.target5,t.target6=b.target6,
t.category_professional=b.category_professional,t.category_word=b.category_word,t.passed=b.passed,t.translator_id=b.translator_id ,t.remark1=b.remark1,t.Product=b.Product
    FROM tmp_t_translator_detail t right join inserted b ON t.realname=@RREALNAME  //更新记录  right join
    else
    begin
     rollback Transaction
    end
 end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值