当前位置:文档之家› SQL游标及触发器实例

SQL游标及触发器实例

SQL Code
1 2 3 4 5 6 7 8 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 Declare @barCode varchar(50)--声明变量用于存放游标结果
DECLARE CsrName CURSOR FOR--声明游标
select barCode from eachBook --游标数据来源
BEGIN
OPEN CsrName --打开游标
FETCH FROM CURSUBOK INTO @barCode--获得来源的一行记录放入变量
WHILE @@FETCH_STATUS = 0
BEGIN
-----------------------------------------------------针对每个结果做的操作
print @barcode
----------------------------------------------------------------------------End
FETCH NEXT FROM CsrName INTO @barCode --处理下一行数据
CLOSE CsrName --游标用完了要关掉
END
总结:一般sql语句是面向集合的,游标是面向集合里面的行的,相当于获取一行数据->处理->获得下一行数据->处理这样一个循环。

能不用游标就尽量不要用游标,性能很烂
--两种触发器,after为表sql语句执行之后操作,INSTEAD OF为之前操作
create trigger tgr_name--创建触发器
on classes --在classes表上
for insert--当classes表插入数据是触发as里面的操作(for 有after默认值,所以是sql 语句执行完了执行)
--,有insert、update、delete三种操作类型。

as
declare @id int;--定义变量用来临时存放数据
select @id = id from inserted; --在inserted表中查询已经插入记录信息,update就有个updated表,deleted就是deleted表
print '刚刚插入的记录的ID是'+@id;
GO
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 create trigger tgr_name--创建触发器
on classes --在classes表上
INSTEAD OF insert--Instead of表示把原来表的操作替换为as定义的操作,用途是不让插入语句直接操作,而用触发器来代替操作
as
IF NOT EXISTS(SELECT * FROM学生表WHERE学号=(SELECT学号FROM INSERTED)) BEGIN
ROLLBACK TRANSACTION
PRINT '要处理记录的学号不存在!'
END
ELSE
BEGIN
INSERT INTO计select * from inserted
PRINT '已经成功处理记录!'
END
go
总结:触发器就是定义一段sql语句,执行了某个sql语句数据库就会自动执行触发器定义的sql 语句。

相关主题