本文章仅展示使用
以前没怎么用到过,今天用到了,发现还是很多资料不是很实用,所以决定自己来写一篇
触发器(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学号