SQL 循环语句

--SQL循环语句
declare@iint
set@i=1
while@i<30
begin
insertintotest(userid)values(@i)
set@i=@i+1
end
===================================================
--语法
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 将导致退出到下一个外层循环。
--首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。
--在嵌套的IF...ELSE 和WHILE 中使用BREAK 和CONTINUE
--在下例中,如果平均价格少于$30,WHILE 循环就将价格加倍,然后选择最高价。
--如果最高价少于或等于$50,WHILE 循环重新启动并再次将价格加倍。
--该循环不断地将价格加倍直到最高价格超过$50,然后退出WHILE 循环并打印一条消息。
USEpubs
GO
WHILE (SELECT AVG(price)FROMtitles)< $30
BEGIN
    UPDATEtitles
    SETprice= price * 2
    SELECTMAX(price)FROMtitles
    IF(SELECTMAX(price)FROMtitles)> $50
    BREAK
    ELSE
    CONTINUE
END
PRINT'Too much for the market to bear'
===================================================
--在带有游标的过程中使用WHILE
--以下的WHILE 结构是名为count_all_rows 过程中的一部分。
--下例中,该WHILE 结构测试用于游标的函数@@FETCH_STATUS 的返回值。因为@@FETCH_STATUS 可能返回–C、或0,所以,
--所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。
--成功提取(0) 后将执行BEGIN...END 循环内部的SELECT 语句。
USEpubs
DECLAREtnames_cursorCURSOR
FOR
SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLES
OPENtnames_cursor
DECLARE@tablenamesysname
FETCHNEXTFROMtnames_cursorINTO@tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
    IF(@@FETCH_STATUS<>-2)
        BEGIN
        SELECT@tablename=RTRIM(@tablename)
        EXEC('SELECT '''+@tablename+''' = count(*) FROM '+@tablename)
        END
FETCHNEXTFROMtnames_cursorINTO@tablename
END
CLOSEtnames_cursor
DEALLOCATEtnames_cursor
 
--@@FETCH_STATUS
--返回类型integer
--返回值为表示:fetch语句成功;表示:fetch语句失败或行不在结果集中;表示:提取的行不存在
===================================================
--可以用变量的形式来增加,不过你的userid 三位显然不够,因为你要加数据,所以要和authnum形式一样,位才够
--下面是一个简单的例子,你可以根据实际需求来改一下。
DECLARE@iint
DECLARE@strUserIdvarchar(10)
DECLARE@strAuthnumvarchar(10)
Set@i= 0
WHILE@i< 10000
BEGIN
    Set@i=@i+1
    SET@strUserId=RIGHT('00000'+CAST(@iASvarchar(10)),5)
    SET@strAuthnum=@strUserId
    insertintouser_infovalues(@strUserId,@strAuthnum)
END
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值