sql 循環語句幾種方式(變量循環,遊標循環,事務)
阿新 • • 發佈:2018-12-14
llb reat 語句 tab create cti table end 數據 --第一
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 FOrders 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
--第二
declare @tmp varchar(50)--臨時變量,用來保存遊標值 declare y_curr cursor for --申明遊標 為orderNum select orderNum from FOrders where orderId<50 open y_curr --打開遊標 fetch next from Y_curr into @tmp ----開始循環遊標變量 while(@@fetch_status=0)---返回被 FETCH 語句執行的最後遊標的狀態,而不是任何當前被連接打開的遊標的狀態。 begin print (@tmp) update FOrders set Functionary+@tmp where orderNum=@tmp --操作數據庫 fetch next from y_curr into @tmp --開始循環遊標變量 end close y_curr--關閉遊標 deallocate y_curr --釋放遊標
--第三
select orderNum,userName,MoneyTotal into #t from FOrders po DECLARE @n int,@error int --set @n=1 set @error=0 BEGIN TRAN --申明事務 declare @tmp varchar(50),@userN varchar(50) --臨時變量,用來保存遊標值 declare y_curr cursor for --申明遊標 為orderNum,userName select orderNum,userName from FOrders where Orderid<50 open y_curr fetch next from y_curr into @tmp,@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 @tmp,@userN END IF @error=0 BEGIN commit tran --提交 END ELSE BEGIN ROLLBACK TRAN --回滾 END close y_curr deallocate y_curr DROP TABLE #t
sql 循環語句幾種方式(變量循環,遊標循環,事務)