首页 > 技术文章 > SQL 循环语句几种写法

guorongtao 2019-11-27 09:09 原文

SQL 循环语句几种写法

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

 

 

 

创建时间:2019-11-27  更新时间:2020.10.13

 

推荐阅读