sql循环语句的写法.docx

上传人:b****6 文档编号:15666273 上传时间:2023-07-06 格式:DOCX 页数:8 大小:16.43KB
下载 相关 举报
sql循环语句的写法.docx_第1页
第1页 / 共8页
sql循环语句的写法.docx_第2页
第2页 / 共8页
sql循环语句的写法.docx_第3页
第3页 / 共8页
sql循环语句的写法.docx_第4页
第4页 / 共8页
sql循环语句的写法.docx_第5页
第5页 / 共8页
sql循环语句的写法.docx_第6页
第6页 / 共8页
sql循环语句的写法.docx_第7页
第7页 / 共8页
sql循环语句的写法.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

sql循环语句的写法.docx

《sql循环语句的写法.docx》由会员分享,可在线阅读,更多相关《sql循环语句的写法.docx(8页珍藏版)》请在冰点文库上搜索。

sql循环语句的写法.docx

sql循环语句的写法

sql循环语句的写法

SQL循环语句

declare@iint

set@i=1

while@i<30

begin

insertintotest(userid)values(@i)

set@i=@i+1

end---------------while条件

begin

执行操作

set@i=@i+1

endWHILE

设置重复执行SQL语句或语句块的条件。

只要指定的条件为真,就重复执行语句。

可以使用BREAK和CONTINUE关键字在循环内部控制WHILE循环中语句的执行。

语法

WHILEBoolean_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关键字后的任何语句。

注释

如果嵌套了两个或多个WHILE循环,内层的BREAK将导致退出到下一个外层循环。

首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。

示例

A.在嵌套的IF...ELSE和WHILE中使用BREAK和CONTINUE

在下例中,如果平均价格少于$30,WHILE循环就将价格加倍,然后选择最高价。

如果最高价少于或等于$50,WHILE循环重新启动并再次将价格加倍。

该循环不断地将价格加倍直到最高价格超过$50,然后退出WHILE循环并打印一条消息。

USEpubs

GO

WHILE(SELECTAVG(price)FROMtitles)<$30

BEGIN

UPDATEtitles

SETprice=price*2

SELECTMAX(price)FROMtitles

IF(SELECTMAX(price)FROMtitles)>$50

BREAK

ELSE

CONTINUE

END

PRINT'Toomuchforthemarkettobear'B.在带有游标的过程中使用WHILE

以下的WHILE结构是名为count_all_rows过程中的一部分。

下例中,该WHILE结构测试用于游标的函数@@FETCH_STATUS的返回值。

因为@@FETCH_STATUS可能返回–2、-1或0,所以,所有的情况都应进行测试。

如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。

成功提取(0)后将执行BEGIN...END循环内部的SELECT语句。

USEpubs

DECLAREtnames_cursorCURSOR

FOR

SELECTTABLE_NAME

FROMINFORMATION_SCHEMA.TABLES

OPENtnames_cursor

DECLARE@tablenamesysname

--SET@tablename='authors'

FETCHNEXTFROMtnames_cursorINTO@tablename

WHILE(@@FETCH_STATUS<>-1)

BEGIN

IF(@@FETCH_STATUS<>-2)

BEGIN

SELECT@tablename=RTRIM(@tablename)

EXEC('SELECT'''+@tablename+'''=count(*)FROM'

+@tablename)

PRINT''

END

FETCHNEXTFROMtnames_cursorINTO@tablename

END

CLOSEtnames_cursor

DEALLOCATEtnames_cursor

C.延伸:

--定义变量:

declare@A1INT,@A2INT,@A3INT

--定义游标

DECLAREmy_CurCURSORFOR

SELECTA1,A2,A3FROMA

--打开游标

OPENmy_Cur

--游标滚到下一行

FETCHNEXTFROMmy_CurINTO@A1,@A2,@A3

--循环直到游标逐行读取完数据

WHILE@@FETCH_STATUS=0

BEGIN

/*

--这里做你想做的事情

--请问

print@A1+@A2+@A3

--怎么实现,谢谢

*/

--游标滚到下一行

FETCHNEXTFROMmy_CurINTO@A1,@A2,@A3

END

--关闭游标

CLOSEmy_Cur

--释放资源

DEALLOCATEmy_Cur

如何在SQL中使用循环结构

解答FOR,LOOP,WHILE,REPEAT是UDB/400的一种内部循环控制,用于遍历表中符合条件的每一行记录。

例如:

目的:

更新employee库,把所有北京籍员工的工资提高10%

例一:

使用FOR循环

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

CREATEPROCEDUREQGPL/TEST_FOR

LANGUAGESQL

BEGIN

FOReach_recordAS

---cur01CURSORFOR

------SELECT*FROMcode,salary,cityfromemployeewherecity="Beijing"

---------DO

------------UPDATEemployee

------------SETsalary=salary*1.1

------------WHERECURRENTOFcur01;

ENDFOR;

END;

例二:

使用LOOP循环

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

CREATEPROCEDUREQGPL/TEST_LOOP

LANGUAGESQL

BEGIN

DECLAREcode_vchar(10);

DECLAREsalary_vinteger;

DECLAREcity_vchar(20);

DECLAREC1CURSORFOR

---SELECTcode,salary,cityFROMemployeeWHEREcity="Beijing";

OPENC1;

loop_label:

LOOP

-FETCHC1INTOcode_v,salary_v,city_v;

--IFSQLCODE=0THEN

------SETsalary_v=salary_v*1.1;

------UPDATEemployeeSETsalary=salary_v

---------WHERECURRENTOFC1;

--ELSE

------LEAVEloop_label;

--ENDIF;

ENDLOOPloop_label;

CLOSEC1;

END;

例三:

使用WHILE循环

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

CREATEPROCEDUREQGPL/TEST_WHILE

LANGUAGESQL

BEGIN

DECLAREcode_vchar(10);

DECLAREsalary_vinteger;

DECLAREcity_vchar(20);

DECLAREat_endinteger;

DECLAREC1CURSORFOR

---SELECTcode,salary,cityFROMemployeeWHEREcity="Beijing";

OPENC1;

SETat_end=0;

WHILEat_end=0DO

--FETCHC1INTOcode_v,salary_v,city_v;

--IFSQLCODE=0THEN

------SETsalary_v=salary_v*1.1;

------UPDATEemployeeSETsalary=salary_v

---------WHERECURRENTOFC1;

--ELSE

------SETat_end=1;

--ENDIF;

ENDWHILE;

CLOSEC1;

END;

例四:

使用REPEAT循环

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

CREATEPROCEDUREQGPL/TEST_REPEAT

LANGUAGESQL

BEGIN

DECLAREcode_vchar(10);

DECLAREsalary_vinteger;

DECLAREcity_vchar(20);

DECLAREC1CURSORFOR

---SELECTcode,salary,cityFROMemployeeWHEREcity="Beijing";

OPENC1;

repeat_label:

REPEAT

--FETCHC1INTOcode_v,salary_v,city_v;

--IFSQLCODE=0THEN

------SETsalary_v=salary_v*1.1;

------UPDATEemployeeSETsalary=salary_v

---------WHERECURRENTOFC1;

--ENDIF;

--UNTILSQLCODE<>0;

ENDREPEATrepeat_loop;

CLOSEC1;

END;

总结:

四种循环结构实现的功能基本相同,用户可以根据自己的习惯选择使用。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2