1.3.5删除游标

 

  DEALLOCATE mycursor

 

 1.3.6 实例训练

 

  如上我介绍完了游标使用的5个步骤,那现在我们就来上上手,练习用游标取出表2 AddSalary的数据。

  为了运行我们自己创建的游标,我们将游标写在存储过程里,方便我们看到游标的整个使用过程。

 

  在sqlserver2000中新建一个存储过程:



-->CREATE PROCEDURE PK_Test

 

AS //声明2个变量

 

declare @O_ID nvarchar(20)

declare @A_Salary float //声明一个游标mycursorselect语句中参数的个数必须要和从游标取出的变量名相同

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

 

GO

通过上面的注释,我想大家都明白了整个游标的创建过程了吧。但是我们现在还是一个抽象的了解,我们学任何知识,都要用于实践,这样才能使抽象的东西变的具体。

  那我们就运行这个存储过程,看看游标到底是怎么取值的:

  我们打开SQLSERVER2000的查询分析器,制定好数据库后,我们执行存储过程

  Exec PK_Test

  让我看看效果吧(如图)

 

MS SQL Server 游标及实例(四)_第1张图片

 

 

  通过实例我们可以看到游标逐行逐行都把值都取出来了。那么我请大家先不看下面的答案,在引言部分我刚才留个大家的问题试一下能不能解决?

  现在我们写一个存储过程解决刚才我留下来的问题吧



-->CREATE PROCEDURE PK_SalaryAdd

 

AS

 

declare @O_ID nvarchar(20),@A_Salary float

declare mycursor cursor for select O_ID,A_Salary from AddSalary

open mycursor

fetch next from mycursor into @O_ID,@A_Salary

while(@@fetch_status = 0)

 

begin

 

Update OriginSalary set O_Salary=O_Salary+@A_Salary where O_ID=@O_ID

fetch next from mycursor into @O_ID,@A_Salary

 

end

 

close mycursor

deallocate mycursor

GO

按照老方法,我们用查询分析器来执行我们的存储过程,看看结果是怎么样的?

  Exec PK_SalaryAdd

  让我看看效果吧(如图)

MS SQL Server 游标及实例(四)_第2张图片

 

 

  执行存储过程,看到我们影响了3行数据

  用sql语句,看看表OriginSalary现在的结果:

 

MS SQL Server 游标及实例(四)_第3张图片