如果Cursor里的第一筆記錄的ExeT不等於0的話,那麼肯定是死循环。
因為Continue只是返回到WHILE (@@Fetch_status=0)處執行,而@Exet又不等於0,所以又不會去執行Fetch Next這一條取下一個@ExET的值,所以肯定是死循环. 

解决方案 »

  1.   

    怎么没有看到声明@name, @exet啊同意楼上说法,又是IF又是COUTINUE,有了IF怎么可以没有ELSE呢,如果出现了IF以外的情况,不就成死循环了么
      

  2.   

          COUTINUE 这句话到什么意思? 他是做什么的,一般在哪里用他。
      

  3.   

    跟C語言里的Continue是一個意思。
      

  4.   

    使程序跳过循环体内CONTINUE语句后面的Transact-SQL语句,而立即进行下次条件测试。
      

  5.   


    还是不明白 SORRY ! 麻烦再说说。 我加50分
      

  6.   

    1 DECLARE PMCJOBD_CURSOR CURSOR FOR
    2 SELECT NAME,EXET FROM EMPL
    3 END 4 OPEN PMCJOBD_CURSOR
    5 FETCH NEXT FROM PMCJOBD_CURSOR INTO @NAME,@EXEC
    6 WHILE (@@FETCH_STATUS = 0)
    7 BEGIN--游标开始8 IF    @EXET = 0 
    9 BEGIN
    10 FETCH NEXT FROM PMCJOBD_CURSOR INTO @NAME,@EXET
    11 CONTINUE
    12 END为了解释方便,在语句前面加上了行号。
    第一个错误:第5句话的变量@EXEC应该为@EXET吧?
    第二个错误:第12句的END是匹配前面的第7句的BEGIN还是第9句的BEGIN,无论那个,都少了一个END。
    第三个错误:当变量@EXET的值不等于0时,就不执行Fetch Next了,然后继续判断当前的记录的@EXET,所以老是导致死循环。据我分析,在12句后应该还有代码,你是不是没有写出来。12 END
    13 --执行某些sql语句
       .....
    14 FETCH NEXT FROM PMCJOBD_CURSOR INTO @NAME,@EXET
    15 ENDCOUTINUE的意思就是当@EXET=0时,不执行13句的sql语句,直接跳到下一条记录。
    如果这样说你还不明白,就去看看C语言编程吧!
      

  7.   

    笨!楼上解释了这么多还没整明白,今天心情好,替你找了帮助,是SQL,不过ORACLE也一样:
    --------------------------------------------------------
    WHILE
    设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。语法
    WHILE Boolean_expression
        { sql_statement | statement_block }
        [ BREAK ]
        { sql_statement | statement_block }
        [ CONTINUE ]参数
    Boolean_expression返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。{sql_statement | statement_block}Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。 BREAK导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。 CONTINUE使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。
      

  8.   

    用while(@@fetch_status=0)页不用continue