sqlserver教程网

当前位置: 主页 > sql语言 >

SQL 游标使用实例

时间:2017-05-26 15:08来源:www.sqlserver.net.cn 作者:admin 点击:
IF EXISTS(SELECT *FROM sysobjects WHERE name=sp_ContestSubmit) DROP PROC sp_ContestSubmit GO -- ============================================= -- Author: zqt -- Create date: 2011-11-25 -- Desc: 系统管理员批量给未交卷的考生交卷

建游标语句:DECLARE MyCursor CURSOR   
    FOR


这个是SQL语句:  Score_UserExam      PK_ContestInfoID  这两个表中查找字段。 

select PK_UserExamID,FK_UserID,FK_ExamOrContestID from Score_UserExam where IsComplete=0 AND  FK_ExamOrContestID in(select PK_ContestInfoID from Contest_Info where FK_ContestGroupID=@GroupID)


这个是游标循环语句

WHILE @@FETCH_STATUS =0
    BEGIN
 

 
        FETCH NEXT FROM  MyCursor INTO @UserExamID, @UserID,@ExamManageID
    END   

 

1、pl/sql类似于C、 这类语言一次只能处理一条数据库记录,但是如果sql语句返回的结果集是多条的话 就要用到游标。
2、先把多条结果存入到游标中,再循环的一条一条取得(fecth)游标中的记录,取得一条处理一条。

---------------

IF EXISTS(SELECT *FROM sysobjects WHERE name='sp_ContestSubmit') 
    DROP PROC sp_ContestSubmit
GO
-- =============================================
-- Author:        zqt
-- Create date: 2011-11-25
-- Desc:        系统管理员批量给未交卷的考生交卷- 
-- =============================================
Create proc sp_ContestSubmit
@GroupID int            --考核ID
as
--申明一个游标
DECLARE MyCursor CURSOR   
    FOR select PK_UserExamID,FK_UserID,FK_ExamOrContestID from Score_UserExam where IsComplete=0 AND  FK_ExamOrContestID in(select PK_ContestInfoID from Contest_Info where FK_ContestGroupID=@GroupID)

--打开一个游标   
OPEN MyCursor

--循环一个游标
DECLARE @UserExamID int ,@UserID int ,@ExamManageID int
    FETCH NEXT FROM  MyCursor INTO @UserExamID, @UserID,@ExamManageID
WHILE @@FETCH_STATUS =0
    BEGIN
        --获取考试考试分数
        DECLARE @UserExamScore int
        select @UserExamScore=sum(Score) from Score_UserAnswer where FK_UserID=@UserID AND FK_UserExamID=@UserExamID
       
        --修改考生交卷信息
        UPDATE [Score_UserExam] SET [Score] =@UserExamScore,[IsComplete] = 1,[EndTime] = getdate(),[DurationSecs] = datediff(ss,BeginTime,getdate()) where PK_UserExamID=@UserExamID


        FETCH NEXT FROM  MyCursor INTO @UserExamID, @UserID,@ExamManageID
    END   

--关闭游标
CLOSE MyCursor
--释放资源
DEALLOCATE MyCursor

/* 测试
    exec sp_ContestSubmit 1
*/
GO

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容
  • SQL TOP 的用法

    SQL Server 的语法: SELECT TOP number|percent column_name(s)FROM table_name 等...

  • SQL测试题1

    一、问答题 1、数据库包含哪些哪几种后缀名的文件必须,这些...