zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    怎样写贪吃蛇小游戏?用100行python代码轻松解决!
    面试必问的celery,你了解多少?
    您的机器学习环保吗?一只AI训练排出180吨二氧化碳
    NLP技术应用到音乐领域,分分钟让你变成音乐大师!
    数据可视化“升级”修炼宝典
    一文掌握Python可视化库的两大王者
    多线程-模拟阻塞queue队列
    设计模式-单例模式
    多线程之wait,notify,volatile,synchronized,sleep
    spring与quartz整合
  • 原文地址:https://www.cnblogs.com/dekevin/p/2471841.html
Copyright © 2011-2022 走看看