2015年年底由于项目需要,边学习边开发项目学习了游标和存储过程 特此记录
游标的使用
使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。
1. 声明游标
最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>;
其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询
2. 打开游标
非常简单,我们就打开刚才我们声明的游标mycursor
OPEN mycursor
3. 读取数据
FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游标名 | @游标变量名 } [ INTO @变量名 [,…] ]
参数说明:
NEXT 取下一行的数据,并把下一行作为当前行(递增)。由于打开游标后,行指针是指向该游标第1行之前,所以第一次执行FETCH NEXT操作将取得游标集中的第1行数据。NEXT为默认的游标提取选项。
INTO @变量名[,…] 把提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果列的数据类型匹配或是结果列数据类型所支持的隐性转换。变量的数目必须与游标选择列表中的列的数目一致。
4. 关闭游标
CLOSE mycursor
5. 删除游标
DEALLOCATE mycursor
6. 循环
在关闭游标前使用while循环进行:
while(@@FETCH_STATUS = 0)
begin
--循环内操作
FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游标名 | @游标变量名 } [ INTO @变量名 [,…] ] --此处必须有
end
@@FETCH_STATUS 的取值
--- 0 fetch语句成功
---1 fetch语句失败或此行不在结果集中
---2 被提取的行不存在
7. 实例
--声明2个变量
declare @O_ID nvarchar(20)
declare @A_Salary float
--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor for select O_ID,A_Salary from AddSalary
--打开游标
open mycursor
--从游标里取出数据赋值到我们刚才声明的2个变量中
fetch next from mycursor into @O_ID,@A_Salary
--判断游标的状态
-- 0 fetch语句成功
---1 fetch语句失败或此行不在结果集中
---2 被提取的行不存在
while (@@fetch_status=0)
begin
--显示出我们每次用游标取出的值
print '游标成功取出一条数据'
print @O_ID
print @A_Salary
--用游标去取下一条记录
fetch next from mycursor into @O_ID,@A_Salary
end
--关闭游标
close mycursor
--撤销游标
DEALLOCATE mycursor