如果Cursor里的第一筆記錄的ExeT不等於0的話,那麼肯定是死循环。
因為Continue只是返回到WHILE (@@Fetch_status=0)處執行,而@Exet又不等於0,所以又不會去執行Fetch Next這一條取下一個@ExET的值,所以肯定是死循环.
因為Continue只是返回到WHILE (@@Fetch_status=0)處執行,而@Exet又不等於0,所以又不會去執行Fetch Next這一條取下一個@ExET的值,所以肯定是死循环.
解决方案 »
- SQL多表连接,效率最高的连接方法?
- 求一SQL语句。
- 数据库文件想换个磁盘,要怎么搞
- left join 比 inner join 慢吗?
- 在执行批量插入时,被插入的文本中含有乱码,为何SQL就终止执行了呢?
- 求条SQL
- SSIS如何自定义日志
- 空格多条件搜索,碰到的问题,大家帮帮忙!
- JSP连接SQL Server ,alexsten(小毅) 给了一个 bean ;hhaibin(小海) 给了一个Javabean ;cqzhangq(阿干)给了一个servlet。都怎么用啊,谢谢。
- 如何将表中的第10至20条记录生成一个记录集?
- 怎样修改SQL Server系统表的记录?
- 急---在SQL中如何建立各个表之间的关联关系呀?
还是不明白 SORRY ! 麻烦再说说。 我加50分
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语言编程吧!
--------------------------------------------------------
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 关键字后的任何语句。