游标和触发器

1、游标(只进游标、静态游标、动态游标)
特点:锁住行;
并发较大,访问数据量大不建议使用游标
Alt+右键 or Ctrl+J(自动补全)
游标:声明,打开,使用,关闭,释放
只进游标只能向前。
sqldatareader 就是只进游标
–1、定义和分配游标(static)、动态游标(dynamic)
declare Product_cursor cursor (static/dynamic) 游标有三种:只进游标、静态游标、动态游标
for
select productno,productname from product
–2、打开游标
open Product_cursor --全局(global)游标、游标
–3、使用游标
declare @productno int,@productname varchar(50)
fetch next from Product_cursor into @productno,@productname --fetch获取 next下一个
while @@FETCH_STATUS=0 --游标是否执行成功(非0数字)
begin
print cast(@productno as varchar)+’-’+@productname
fetch next from Product_cursor into @productno,@productname --fetch获取 next下一个
end
–4、关闭游标(修改游标状态)
close Product_cursor
-5、-释放游标(接触游标)
deallocate Product_cursor

静态游标:next向前,piror向上 first第一个, last最后一个, 不能读取更新数据,不是动态数据
动态游标:next向前,piror向上 first第一个, last最后一个, 读取更新数据
fetch piror from Product_cursor into @productno,@productname
fetch first from Product_cursor into @productno,@productname
fetch last from Product_cursor into @productno,@productname
数据定位方式:
absolute 绝对定位:以数据集为参照,绝对定位,由于数据会更新,只有静态游标才能更使用
relative 相对定位:相对当前游标位置,定位,只进游标不能用
fetch absolute 5 from Product_cursor into @productno,@productname
fetch absolute 5 from Product_cursor into @productno,@productname

2、触发器(表:添加,修改,删除)
–创建触发器类型
for:和动作同时触发(不带约束权限)
after:动作执行完之后触发(不带约束权限)
instead of(带约束权限)
引发的动作
创建一个触发器trigger
create trigger tri_ProductLog
on Product(表名)
for insert,delete,update
as
begin
declare @userid int --操作人编号
–添加inserted 删除deleted 修改 deleted+inserted
declare @action varchar(10)
declare @count int =0;
if exists(select top 1 * from inserted)
begin
set @action=‘添加’
select @userid=createuserid from inserted
@count=@count+1
end
if exists(select top 1 * from deleted)
begin
set @action=‘删除’
select @userid=createuserid from deleted
end
if @count=2
begin
set @action=‘修改’
select @userid=createuserid from deleted
end
insert into Logs(Logcontent,createuserid) values(‘您针对产品表做了’+@action+‘动作’,@userid)
end;
sql创建触发器,底层没有update
drop trigger tri_productlog --删除触发器

–带约束条件的触发器
create trigger tri_DelProduct
on ProductType
instead of delete
as
begin
declare @typeid int
select @typeid=typeid from deleted
delete from Product where typeid=@typeid
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值