sql语句编写存储过程,使用游标循环打印学生表中的数据,求大神

如题所述

  在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 查询语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。

  我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。


以下实例用的是在存储过程中遍历结果和查询数据库中所有 存储过程名称 加以处理以文本形式输出:

create procedure findName--创建一个名为findName的存储过程  
AS
 declare @result VARCHAR(30)--用来处理结果的变量  
 begin  
 --声明一个游标  
  Declare curStudentFee Cursor for   
  SELECT NAME FROM SYSOBJECTS WHERE XTYPE='P';---查询语句(查询所有用户存储过程名称)  
    
   --打开游标  
  Open curStudentFee   
  --循环并提取记录  
  Fetch Next From curStudentFee Into @result--取第一条记录存入@result中  
  While ( @@Fetch_Status=0 )     
        begin  
        print ''''+@result+''''+',';---处理结果  
     Fetch Next From curStudentFee into @result----下一条  
       end   
  --关闭游标     
   Close curStudentFee
  --释放游标  
 Deallocate curStudentFee   
 end

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27

写一个例子给楼主看下就知道了:

在sqlserver2000中新建一个存储过程:
CREATE PROCEDURE PK_Test
AS
//声明1个变量
declare @name nvarchar(20)  

//声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor for select name from student

//打开游标
open mycursor

//从游标里取出数据赋值到我们刚才声明的2个变量中

fetch next from mycursor into @name
 
//判断游标的状态
//0 fetch语句成功    
//-1 fetch语句失败或此行不在结果集中    
//-2被提取的行不存在
while (@@fetch_status=0)
begin

//显示出我们每次用游标取出的值
   print '游标成功取出一条数据'
   print @name

//用游标去取下一条记录
   fetch next from mycursor into @name

end

//关闭游标
close mycursor

//撤销游标
deallocate mycursor

GO

本回答被提问者和网友采纳
相似回答