sql server 触发器、存储过程、游标

本文章仅展示使用
以前没怎么用到过,今天用到了,发现还是很多资料不是很实用,所以决定自己来写一篇

触发器(trigger)

触发器的原理是跟存储过程类似的,但是触发器是一个特殊的存储过程。他往往伴随事件执行。
触发器目前有两种: 1、DML触发器。2、DDL触发器
原理大家可以网上百度下,我这里主要写一下用法

-- 删除触发器
DROP TRIGGER 触发器名称;

-- 创建触发器 
-- 基本语句如下﹕  
create trigger 触发器名称
    on {table_name | view_name}
    {for | After | Instead of }
    [ insert, update,delete ]
    as
       sql语句

-- 实例

-- 创建student表的触发器
CREATE TRIGGER student_trigger 
ON student 
FOR insert   -- 在插入数据的时候触发
AS
	-- 这里跟写存储过程一样
	DECLARE @i varchar(50) --定义变量
	set @i = 1  --给变量赋值
	PRINT '插入' -- 输出

存储过程(procedure)

当你想使用一系列sql一起执行时,就可以使用存储过程

-- 删除存储过程
DROP PROCEDURE 存储过程名字;

-- 执行存储过程
exec 存储过程名字 变量1,变量2,...

-- 创建存储过程语法
CREATE PROCEDURE 名字(
@变量1名 类型
@变量2名 类型
...
)
AS
BEGIN
	sql语句
END

-- 实例
CREATE PROCEDURE pro_name(
  @year char(4),
  @schId varchar(1000)
)
as 
begin
	print "测试"
end
-- 执行
exec pro_name '2022', '5800'

游标(CURSOR)

个人理解游标其实跟循环类似,但是比循环还要耗性能。
游标是针对行操作的

读取数据开始

fetch next from stuCur --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
fetch prior from stuCur --读取当前行的前一行,并使其置为当前行
fetch first from stuCur --读取游标的第一行,并使其置为当前行(不能用于只进游标)
fetch last from stuCur --读取游标的最后一行,并使其置为当前行(不能用于只进游标)
fetch absolute 2 from stuCur --读取从游标头开始向后的第2行,并将读取的行作为新的行
fetch relative 3 from stuCur --读取从当前行开始向后的第3行,并将读取的行作为新的行
fetch relative-2 from stuCur --读取当前行的上两行,并将读取的行作为新的行

@@fetch_status是MSSQL的一个全局变量

其值有以下三种,分别表示三种不同含义:【返回类型integer】

- 0 FETCH 语句成功

-1 FETCH 语句失败或此行不在结果集中

-2 被提取的行不存在

--定义变量
DECLARE @i int 
SET @i = 0
--创建游标stu_cursor ,查询students表
DECLARE stu_cursor CURSOR FOR SELECT autoid FROM students 
-- 打开游标
OPEN stu_cursor
	-- 通过游标获取每行的 autoidz字段,并定义成 @autoid 变量
	FETCH NEXT FROM stu_cursor INTO @autoid
	while @@FETCH_STATUS = 0
	begin
		UPDATE students SET stuid = @i WHERE autoid=@autoid
	end
	set @i = @i + 1
-- 关闭游标
CLOSE stu_cursor

-- 上面是通过游标,获取autoId来修改stuid学号
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值