Sql Server 使用while 循环数据

博客涉及数据库与SQL相关内容,但具体信息缺失。数据库是数据存储管理的重要工具,SQL是用于操作数据库的标准语言,二者在信息技术领域应用广泛。

  
declare @workId int = 0;
declare @userId int = 123;
 
if @userId <=0
begin 
    Print 'User name error';
    return;
end

declare @table_BookId table (BookId int);

select @workId as workId;

insert into @table_BookId  select BookId from Books  

select BookId,Code,BookTitle,BookDate,CreateTime from Books 
where BookId in (select * from @table_BookId);

begin transaction --开启事务
    
	declare @BookId int = 0;
	declare @actionHistoryId int =0;

    while exists(select BookId from @table_BookId) --是否存在数据,存在则进入循环
	begin 
	    select top 1 @BookId = BookId from @table_BookId --获取首条数据Id

		Update BookParties set State=1,userId = @userId
		where BookId = @BookId  

		set @actionHistoryId =0;

		INSERT INTO [dbo].[Action] 
				   ([BookId]
				   ,[Action]
				   ,[ActionPartyId]
				   ,[ActionParty]
				   ,[ActionById]
				   ,[ActionBy]
				   ,[ActionTimestamp]
				   ,[ActionType])
			 VALUES
				   (@BookId
				   ,'Response'
				   ,@workId
				   ,@workgroupName
				   ,@userId
				   ,@responseUserName
				   ,GETDATE()
				   ,0)
	    select @actionHistoryId = @@identity;

		INSERT INTO [dbo].[ActionDetails]  ([UpdatedValue] ,[actionHistoryId] ,[FieldName])
			 VALUES ('ABC' ,@actionHistoryId, @workgroupName);
 

	    delete from @table_BookId where BookId = @BookId; --操作完后,删除该Id,避免一直循环
	end
commit transaction --提交事务

select 'Executed successfully' as 'Operation Tips'
Print 'complete the operation';

<think>我们正在讨论SQLServerWHILE循环使用BREAK语句的方法。根据引用[2]和引用[3],我们可以知道BREAK语句用于立即终止WHILE循环的执行,跳出循环。而CONTINUE语句则用于跳过当前循环的剩余部分,直接进入下一次循环的判断。下面我将详细说明BREAK的用法,并提供示例代码。###1.WHILE循环基本语法在SQLServer中,WHILE循环的基本语法如下:```sqlWHILE<布尔表达式>BEGIN--循环体(一条或多条SQL语句)[BREAK]--可选,用于跳出循环[CONTINUE]--可选,用于跳过本次循环剩余部分END```###2.BREAK语句的作用当在循环体内执行到BREAK语句时,会立即终止整个循环的执行,控制流将跳转到循环体之后的语句。###3.示例代码假设我们有一个计数器,从1开始递增,当计数器达到5时,我们使用BREAK语句跳出循环。```sqlDECLARE@counterINT=1;WHILE(1=1)--条件永远为真,理论上会无限循环BEGINPRINT'当前计数:'+CAST(@counterASVARCHAR(10));IF@counter>=5BEGINPRINT'计数器已达到5,跳出循环';BREAK;--跳出循环ENDSET@counter=@counter+1;ENDPRINT'循环结束';```运行结果:```当前计数:1当前计数:2当前计数:3当前计数:4当前计数:5计数器已达到5,跳出循环循环结束```###4.另一个示例(结合CONTINUE)下面是一个同时使用BREAK和CONTINUE的示例。该示例只打印奇数,当计数器达到5时跳出循环:```sqlDECLARE@counterINT=0;WHILE(@counter<10)BEGINSET@counter=@counter+1;--如果是偶数,跳过打印IF(@counter%2=0)BEGINCONTINUE;--跳过本次循环剩余部分,进入下一次循环ENDPRINT'当前奇数:'+CAST(@counterASVARCHAR(10));--当计数器达到5时跳出循环IF(@counter>=5)BEGINBREAK;ENDENDPRINT'循环结束';```运行结果:```当前奇数:1当前奇数:3当前奇数:5循环结束```###5.注意事项-BREAK语句会立即终止整个循环,因此循环体内BREAK之后的语句不会被执行。-在嵌套循环中,BREAK只会跳出当前所在的最内层循环。###总结在SQLServerWHILE循环中,使用BREAK可以提前终止循环。通常在满足某个条件时使用BREAK来避免无限循环或提前结束循环。§§相关问题§§1.在SQLServer中,如何避免无限循环?2.除了BREAK,还有哪些控制循环流程的方法?3.在嵌套循环中,如何跳出外层循环?</think>### SQL Server WHILE循环中BREAK语句用法详解 在SQL Server中,`BREAK`语句用于**立即终止WHILE循环的执行**,直接跳出当前循环体。其基本语法结构如下: ```sql WHILE <条件表达式> BEGIN <语句块> IF <触发条件> BREAK; -- 跳出循环 <语句块> END ``` #### 核心要点: 1. **BREAK位置**:必须放在循环体内部(`BEGIN...END`之间) 2. **执行效果**:立即终止整个循环,继续执行循环之后的语句 3. **典型场景**:满足特定条件时提前结束循环(如找到目标数据、错误处理等) --- ### 实际应用示例 #### 示例1:基础跳出循环 ```sql DECLARE @i INT = 1; WHILE (@i <= 10) BEGIN PRINT '当前值: ' + CAST(@i AS VARCHAR); SET @i += 1; IF @i > 5 BREAK; -- 当i>5时跳出循环 END PRINT '已跳出循环'; ``` **执行结果**: ``` 当前值: 1 当前值: 2 当前值: 3 当前值: 4 当前值: 5 已跳出循环 ``` #### 示例2:数据更新控制 ```sql DECLARE @studentId INT, @score INT; WHILE(1=1) -- 无限循环 BEGIN -- 获取不及格学生 SELECT TOP 1 @studentId = StudentId, @score = Score FROM Students WHERE Score < 60 ORDER BY StudentId; IF @studentId IS NULL -- 无不及格学生时跳出 BREAK; -- 更新成绩 UPDATE Students SET Score = 60 WHERE StudentId = @studentId; PRINT '已更新学生: ' + CAST(@studentId AS VARCHAR); END PRINT '所有成绩已达标'; ``` #### 示例3:嵌套循环中的BREAK ```sql DECLARE @i INT = 0, @j INT; WHILE(@i < 3) BEGIN SET @j = 1; PRINT '外层循环: ' + CAST(@i AS VARCHAR); WHILE(1=1) BEGIN PRINT ' 内层值: ' + CAST(@j AS VARCHAR); SET @j += 1; IF @j > 2 -- 只执行内层2次 BREAK; END SET @i += 1; IF @i > 1 -- 外层执行2次后跳出 BREAK; END ``` **执行结果**: ``` 外层循环: 0 内层值: 1 内层值: 2 外层循环: 1 内层值: 1 内层值: 2 ``` --- ### 关键注意事项 1. `BREAK`只影响**当前所在循环**,嵌套循环中不会跳出外层循环[^3] 2. 通常与`IF`条件判断配合使用,避免无限循环 3. `BREAK`后不可跟其他语句(同一BEGIN块内后续语句不执行) 4. 与`CONTINUE`的区别: - `BREAK`:完全终止循环 - `CONTINUE`:跳过当前迭代,直接进入下一次循环[^2] > 可视化流程: > `WHILE条件 → 循环体 → BREAK条件? → 是 → 退出循环` > `               ↓                 → 否 → 继续执行` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值