csjoz11

导航

sql server 循环 有那几种 sql实现循环

SQL循环语句 

 

declare @i int 
set @i=1 
while @i<30 
begin 
insert into test (userid) values(@i) 
set @i=@i+1 
end
1.
2.
3.
4.
5.
6.
7.

 


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

while 条件 
begin 
执行操作 
set @i=@i+1 
end 

WHILE 
设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 

+语法 

 

 

WHILE Boolean_expression 
      { sql_statement | statement_block } 
      [ BREAK ] 
      { sql_statement | statement_block } 
      [ CONTINUE ]
1.
2.
3.
4.
5.


  

参数 
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 循环并打印一条消息。 


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'
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
·······································
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
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
·······································

C.延伸:

--定义变量:
declare @A1 INT,@A2 INT,@A3 INT
--定义游标
DECLARE my_Cur CURSOR FOR
SELECT A1,A2,A3 FROM A
--打开游标
OPEN  my_Cur 
--游标滚到下一行
FETCH NEXT FROM  my_Cur INTO @A1,@A2,@A3
--循环直到游标逐行读取完数据
WHILE @@FETCH_STATUS = 0
BEGIN
   /*
   --这里做你想做的事情
   --请问
   print  @A1+@A2+@A3
   --怎么实现,谢谢
   */
   --游标滚到下一行
   FETCH NEXT FROM  my_Cur INTO @A1,@A2,@A3
END
--关闭游标
CLOSE my_Cur 
--释放资源
DEALLOCATE my_Cur  

 
-----------------------------------
sql server 循环 有那几种 sql实现循环
https://blog.51cto.com/u_12219/7615065

posted on 2023-11-16 18:36  csjoz11  阅读(156)  评论(0编辑  收藏  举报