Sqlserver游标复习

经常写存储过程,但今天在游标使用过程中还是疏忽了一些事情,执行过程中一直执行不下去,后来直接sqlserver挂了,教训啊!

代码虽简单,望铭记:

Create  PROCEDURE [dbo].[temphxb]
AS
BEGIN
    declare @uid int
    declare mycursortemp Cursor
        for select uid from temptable1 where Indate>‘2015-05-21‘ and type=‘1‘ group by uid  having COUNT(*)>1
    open mycursortemp
    fetch next from mycursortemp into @uid

    while @@FETCH_STATUS=0
    begin
        delete from temptable1 where id
        in (select top 1 id from temptable1 where [email protected] and Indate>‘2015-05-21‘ and fdtype=‘1‘)

        update temptable2 set num=num+1 where uid=@uid
        fetch next from mycursortemp into @uid
    end

    close mycursortemp
    DEALLOCATE mycursortemp
end

游标使用过程中,一般分为以下五个步骤:
1、声明游标

2、打开游标

3、使用游标

4、关闭游标

5、删除游标

今天本人就是在第三步游标遍历数据中忘记去执行  fetch next from mycursortemp into @uid,导致死循环发生,造成不小的损失。
另外很多人忘记关闭游标,这也会造成下次执行发生错误。

数据库操作需要谨慎谨慎,切记。

时间: 2024-07-29 15:16:39

Sqlserver游标复习的相关文章

sqlserver游标概念与实例全面解说

引言 我们先不讲游标的什么概念,步骤及语法,先来看一个例子:   ?????? 表一 OriginSalary??????????????????????????????????????????????????? 表二 AddSalary 现在有2张表,一张是OriginSalary表--工资表,有三个字段0_ID 员工号(NVARCHAR).O_Name员工姓名(NVARCHAR).O_Salary工资(FLOAT). 另一张表AddSalary表-加薪表.有2个字段,O_ID员工号.A_Sa

sqlserver 游标的使用

举个栗子: -- 临时变量 DECLARE @Id UNIQUEIDENTIFIER -- 声明游标名 DECLARE cursor_name CURSOR FOR SELECT ID from COM_DataDictionaryInfo -- 打开游标 OPEN cursor_name -- 先查询一次再循环,防止有多个游标时@@FETCH_STATUS=-1不能进入下个游标循环的情况 FETCH NEXT FROM cursor_name into @Id -- 循环取数据 WHILE @

SQLserver游标原理和使用方法

在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句.但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录.那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案. 1.1 游标和游标的优点 在数据库中,游标是一个十分重要的概念.游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制.游标总是与一条T_SQL 选择语句相关联因为游标由结果集

SqlServer游标简介

游标实例:             Declare MyCusror Cursor Scroll For Select * From Master_Goods Order By GoodsID Open MyCursor Fetch next From MyCursor             Into @GoodsCode,@GoodsName While(@@Fetch_Status = 0) Begin Begin    Select @GoodsCode = Convert(Char(2

sqlserver 游标中的查询语句用到变量问题

declare @TableName VARCHAR(32); --数据表名 declare @DateCounter VARCHAR(32); --时间日期 declare @ID --创建游标 --exec 后面的语句需是字符类型,所以@TableName和@DateCounter变量需是字符类型 EXEC('DECLARE myCursor CURSOR FOR SELECT ID FROM '[email protected]+' WHERE CONVERT(VARCHAR(10),Da

SQLServer游标详解

一.游标概念 我们知道,关系数据库所有的关系运算其实是集合与集合的运算,它的输入是集合输出同样是集合,有时需要对结果集逐行进行处理,这时就需要用到游标.我们对游标的使用一本遵循"五步法":声明游标->打开游标->读取数据->关闭游标->删除游标.以下就从这五步对游标的使用进行说明,并给出具体实例. 二."五步法"讲解 1.声明游标(DECLARE CURSOR) (1) DECLARE CURSOR 既接受基于 ISO 标准的语法,也接受使用

sqlserver游标使用误区

在使用游标出现逻辑错误时,查阅资料,只有改掉while中的游标取值在while循环最后,没有说明while以前会出现的错误,而且没有具体说明原因,今天在工作中解决了这个问题,写了这个博客,希望对使用游标少的园友有帮助,也给自己提个醒. 按照游标的规则使用时,在使用游标取到数据时后进行操作在逻辑上正确,但是会造成数据异常,在正常流程下逻辑正确,所以很难发现其中的逻辑错误,下面是工作时的例子,以及解决的具体流程. 好久没用游标,今天查了下资料开始使用,但是出现问题: --插入客户信息 create

sqlServer游标的使用

USE [PatPD1]GO/****** Object:  UserDefinedFunction [dbo].[fun_GetConditionInner]    Script Date: 2015/5/9 9:03:38 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO ALTER function [dbo].[fun_GetConditionInner] (@Product varchar(20))  returns  varch

SqlServer基础复习

一.数据类型      包括整数类型(可以用来做主键)的如bit,int ,samllint,tinyint,bigint,存储的范围不同,常用的有int,bigint等:树脂类型decimal(p,s)[p为固定精度,s为宽度,使用这种数据类型时必须指定范围和精度],numeric(decimal的同义词)money(货币型,精确到货币的万分之一),smallmoney(货币型),float(近似数值型,供浮点数使用)等. 字符类型:固定长度char,nchar,可变长度varchar,国际化