触发器和游标

1:触发器
触发时自动生成两个表inserted和deleted
定义:类似于C#中的事件,是一种特殊的参数不用手动调用;
语法:create trigger 触发器名 on设置触发器的表 after(for)或 instead of 查询语句类型

(insert,delete,updata)
as
begin
触发时要做的事
end
after在执行表(iserted/deleted)中有记录,在被执行记录表中没记录;而instead of则会替换触发器

不让其执行执行删除时量表中都会有同条记录
例子:
-- 1在每次插入数据的时候都把插入的数据值打印出来。
create trigger trigger_print on teacher
after insert
as
begin
declare @tname nvarchar(50)
declare @tsalary money
select @tname= tname from inserted
select @tsalary= tsalary from inserted
end

print @tname
print @tsalary
insert into teacher values('钟莲',8000)
将deleted表备份到另一个表
select top 0 * into classbak
from teacher
-- --(2)创建触发器
create trigger trigger_eu on teacher
after delete
as
begin
set identity_insert classbak on--插主键时要记得打开
insert into classbak (tid,tname,tsalary)--注意字段必须记得写
select * from deleted
set identity_insert classbak off
end
delete from teacher where tid=1
select * from classbak
select * from teacher
2:游标
效率比较慢
定义declare 游标名 cursor 游标选项(fast_forward,forward_only<得到当前id current of 游标名

>)
for 查询语句(这里的表就是游标所建的表)
(2)open
(3)操作
fetch next from 变量名
while @@fetch_status=0 --全局变量看上一条是否被执行(移动成功)
begin
sql语句
fetch next from 变量名//改变条件的语句
(4)关闭 close
(5)释放 deallocate
-- 2将奖金中的reward设置为 工资的0.1倍
---1:定义变量
declare @id int
declare @salary money
--2:建游标在工资表上
declare add_reward cursor fast_forward
for select tid,tsalary from teacher
open add_reward
fetch next from add_reward into @id,@salary
while @@FETCH_STATUS=0
begin
update teachersalary set reward=0.1*@salary
where tsid=@id
fetch next from add_reward into @id,@salary
end
close add_reward
deallocate add_reward
end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值