存储过程中的循环语句.doc_第1页
存储过程中的循环语句.doc_第2页
存储过程中的循环语句.doc_第3页
存储过程中的循环语句.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

存储过程中的循环语句 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_blockTransact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。BREAK导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。CONTINUE使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。注释如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。示例A. 在嵌套的 IF.ELSE 和 WHILE 中使用 BREAK 和 CONTINUE在下例中,如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $50,然后退出 WHILE 循环并打印一条消息。USE pubsGOWHILE (Select AVG(price) FROM titles) $50BREAK ELSECONTINUEENDPRINT Too much for the market to bearB. 在带有游标的过程中使用 WHILE以下的 WHILE 结构是名为 count_all_rows 过程中的一部分。下例中,该 WHILE 结构测试用于游标的函数 FETCH_STATUS 的返回值。因为 FETCH_STATUS 可能返回 2、-1 或 0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取 (0) 后将执行 BEGIN.END 循环内部的 Select 语句。USE pubsDECLARE tnames_cursor CURSORFOR Select TABLE_NAME FROM INFORMATION_SCHEMA.TABLESOPEN tnames_cursorDECLARE tablename sysname-SET tablename = authorsFETCH NEXT FROM tnames_cursor INTO tablenameWHILE (FETCH_STATUS -1)BEGIN IF (FETCH_STATUS -2) BEGINSelect tablename = RTRIM(tablename)EXEC (Select + tablename + = count(*) FROM + tablename )PRINT END FETCH NEXT FROM tnames_cursor INTO tablenameENDCLOSE tnames_cursorDEALLOCATE tnames_cursor附加:一个SQL Server存储过程循环的例子 declare ID_cursorcursor for select * from 表名 open ID_cursor /*while fetch_status=0*/ begin update 表名 set 字段名=值 end close ID_cursor deallocate ID_cursorSQL Server中Procedure的写法(供参考) 比较两个table,已有这条记录update,没有insert.Create procedure upd_employeeasdeclare emp_nochar(8)declare namecvarchar(30)declare org char(6)declare emp_type char(4)declare lin char(4)declare entr_date smalldatetimedeclare deptr_fg char(10)declare deptr_date smalldatetimeDECLAREcuremp CURSOR forSelect emp_no,namec,org,emp_type,lin,entr_date,deptr_fg,deptr_date FROM temp_empfor updateopen curempwhile(0=0) begin fetch next from curemp into emp_no,namec,org,emp_type,lin,entr_date, deptr_fg,deptr_date;if fetch_status0 breakUpdate employee SET namec= namec,org=org,emp_type=emp_type,lin=lin,entr_date=entr_date,deptr_fg=deptr_fg,deptr_date=deptr_dateWhere emp_no = emp_no;ENDclose curempdeallocate curempinsert into employee(emp_no,namec,org,emp_type,lin,entr_date,deptr_fg,deptr_date)select emp_no,namec,org,emp_ty

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论