SQL 循环语句几种写法

摘自:https://www.cnblogs.com/guorongtao/p/11939751.html

1、正常循环语句

复制代码
复制代码
declare @orderNum varchar(255)
create table #ttableName(id int identity(1,1),Orders varchar(255))
declare @n int,@rows int
insert #ttableName(orders) select orderNum from pe_Orders where orderId<50
--select @rows=count(1) from pe_Orders
select @rows =@@rowcount
set @n=1
while @n<=@rows
begin
  select @orderNum=OrderNum from PE_Orders where OrderNum=(select Orders from #ttableName where id=@n)
  print (@OrderNum)
  select @n=@n+1
end
drop table #ttableName
复制代码
复制代码

2、不带事务的游标循环

复制代码
复制代码
declare @orderN varchar(50)  --临时变量,用来保存游标值
declare y_curr cursor for   --申明游标 为orderNum
select orderNum from pe_Orders where orderId<50
open y_curr   --打开游标
fetch next from Y_curr into @orderN   ----开始循环游标变量
while(@@fetch_status=0)  ---返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
begin
  print (@orderN)
  update pe_Orders set Functionary+@orderN where orderNum=@orderN   --操作数据库
  fetch next from y_curr into @orderN   --开始循环游标变量
end
close y_curr  --关闭游标
deallocate y_curr   --释放游标
复制代码
复制代码

3、带事务的游标循环

复制代码
复制代码
select orderNum,userName,MoneyTotal into #t from pe_Orders po
DECLARE @n int,@error int
--set @n=1
set @error=0
BEGIN TRAN   --申明 开始事务
declare @orderN varchar(50),@userN varchar(50)   --临时变量,用来保存游标值
declare y_curr cursor for    --申明游标 为orderNum,userName
select orderNum,userName from PE_Orders where Orderid<50
open y_curr
fetch next from y_curr into @orderN,@userN
while @@fetch_status = 0
BEGIN
  select isnull(sum(MoneyTotal),0),orderNum from #t where username=@userN
  -- set @n=@n+1
  set @error=@error+@@error  --记录每次运行sql后 是否正确 0正确
  fetch next from y_curr into @orderN,@userN
END
IF @error=0
BEGIN
  commit tran   ---事务提交
END
ELSE
BEGIN
  ROLLBACK TRAN   ---事务回滚
END
close y_curr
deallocate y_curr
DROP TABLE #t
复制代码
复制代码

4、if语句使用示例

复制代码
复制代码
declare @a int
set @a=12
if @a>100
begin
  print @a
end
else
begin
  print 'no'
end
复制代码
复制代码

5、while语句使用示例

复制代码
复制代码
declare @i int
set @i=1
while @i<30
begin
  insert into test (userid) values(@i)
set @i=@i+1
end
-- 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 本条为以前从网上查找获取!
复制代码
复制代码

6、临时表和try

复制代码
复制代码
-- 增加临时表
select * into #csj_temp from csj
-- 删除临时表 用到try
begin try -- 检测代码开始
  drop table #csj_temp
end try
begin catch -- 错误开始
end catch
复制代码
复制代码

7、游标循环读记录

复制代码
复制代码
declare @temp_temp int
--declare @Cur_Name
--@Cur_Name="aaa"
--------------------------------- 创建游标 --Local(本地游标)
DECLARE aaa CURSOR for select House_Id from House_House where Deleted=0 or deleted is null
----------------------------------- 打开游标
Open aaa
----------------------------------- 遍历和获取游标
fetch next from aaa into @temp_temp
--print @temp_temp
while @@fetch_status=0
begin
  --做你要做的事
  select * from House_monthEnd where House_Id=@temp_temp
  fetch next from aaa into @temp_temp -- 取值赋给变量
-- 
end
----------------------------------- 关闭游标
Close aaa
----------------------------------- 删除游标
Deallocate aaa
复制代码
posted @   golandhome  阅读(4718)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示