SQL循环语句的妙用
SQL中使用FOR语句和While语句都可以实现循环操作,下面就将为您介绍SQL循环语句的一些应用,供您参考,希望对您深入学习应用循环语句能够有所帮助。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站建设、成都网站制作、株洲网络推广、成都微信小程序、株洲网络营销、株洲企业策划、株洲品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供株洲建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
使用SQL的Agent可以执行计划任务,把写好的SQL语句放在计划任务里,可以达到奇妙的效果,如定时备份数据,定时执行特定操作等等,当涉及循环操作很多条数据时,这里就要使用游标了,当然SQL中也有循环语句,如使用While。不过while的功能只能实现一般的操作,游标的功能更为强大些,可在一个指定的一个集合内循环操作数据,实现动态操作,那就更牛了,呵呵,以下资料供存档用。
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 关键字后的任何语句。
注释
 如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。
示例
declare @i int
 set @i=1
 while @i<30
 begin
 insert into test (userid) values(@i)
 set @i=@i+1
 end
------------------------------------------------------------
while 条件
 begin
 执行操作
 set @i=@i+1
 end
A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE
 在下例中,如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $50,然后退出 WHILE 循环并打印一条消息。
USE pubs
 GO
 WHILE (SELECT AVG(price) FROM titles) < $30
 BEGIN
      UPDATE titles
         SET price = price * 2
      SELECT MAX(price) FROM titles
      IF (SELECT MAX(price) FROM titles) > $50
         BREAK
      ELSE
         CONTINUE
 END
 PRINT 'Too much for the market to bear'
B. 在带有游标的过程中使用 WHILE
 以 下的 WHILE 结构是名为 count_all_rows 过程中的一部分。下例中,该 WHILE 结构测试用于游标的函数 @@FETCH_STATUS 的返回值。因为 @@FETCH_STATUS 可能返回 –2、-1 或 0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取 (0) 后将执行 BEGIN...END 循环内部的 SELECT 语句。
单变量循环
 USE pubs
 DECLARE tnames_cursor CURSOR
 FOR
      SELECT TABLE_NAME
      FROM INFORMATION_SCHEMA.TABLES
 OPEN tnames_cursor
 DECLARE @tablename sysname
 --SET @tablename = 'authors'
 FETCH NEXT FROM tnames_cursor INTO @tablename
 WHILE (@@FETCH_STATUS <> -1)
 BEGIN
      IF (@@FETCH_STATUS <> -2)
      BEGIN   
         SELECT @tablename = RTRIM(@tablename)
         EXEC ('SELECT ''' + @tablename + ''' = count(*) FROM '
               + @tablename )
         PRINT ' '
     END
      FETCH NEXT FROM tnames_cursor INTO @tablename
 END
 CLOSE tnames_cursor
 DEALLOCATE tnames_cursor
多变量循环
CREATE      PROCEDURE my_FeeCount AS
 declare @到期时间      char(10)
 declare @片区          char(20)
 declare @缴费用户数 char(10)
 declare @sql   char(2000)
declare cur_data cursor for
 select   convert(varchar(10),到期时间,120) as 到期时间 ,片区,count(distinct main_id) as 缴费用户数
 from V_aipu_fee where 提交时间>=convert(varchar(10),getdate()-90,120) and 提交时间
 Group   by   convert(varchar(10),到期时间,120),片区
 order   by   convert(varchar(10),到期时间,120)
 open cur_data
fetch next from cur_data into @到期时间,@片区,@缴费用户数
 while(@@fetch_status = 0)
 begin
         set @sql='update '+RTRIM(@片区)+'实收='+RTRIM(@片区)+'实收+'+RTRIM(@缴费用户数)+' where 收费日期='''+RTRIM(@到期时间)+''''
print @sql
fetch next from cur_data into @到期时间,@片区,@缴费用户数
 end
close cur_data
 deallocate cur_data
【编辑推荐】
SQL中UNION指令的用法
SQL中where 1=1语句的作用
SQL数据库中事务的ACID特性
SQL数据库中的临时表详解
SQL循环语句示例
分享名称:SQL循环语句的妙用
转载来于:http://jxruijie.cn/article/djoscjg.html

 
                