SqlServer游标for循环
begin
declare @a int,@error int --循环次数、异常数量
declare @PartnerId int
泰迪狗价格declare @time datetime
declare @name nvarchar(500)
declare @AddYear int =1 ;
declare @Count int =0 ;
declare @CreateTime date='2020-10-17';
declare @AfterDueTime date;
--
t @a=1
t @error=0
begin tran --申明事务红色性格
--申明游标数据来源
declare order_cursor cursor
for (lect Id,CreateTime,[Name] from [dbo].[Partner] )
--打开游标--
open order_cursor
--开始循环游标变量--
fetch next from order_cursor into @PartnerId,@time,@name
while @@FETCH_STATUS = 0 --返回被 FETCH语句执⾏的最后游标的状态--
begin
--------------在这⾥写每次循环的逻辑
lect @Count=count( Id ) from [dbo].[PartnerSerialKey] where RenewId=0 and PartnerId=@PartnerId
--判断条件
if @Count=0
begin
--满⾜条件跳过此次循环
GOTO FORNEXT;
end
el
begin
霸气的诗
--执⾏正常逻辑
t @AfterDueTime =dateadd( year,@AddYear, @CreateTime);
--添加财务记录
INSERT INTO [dbo].[Renew]
([PartnerId]
,[AddYear]
,[Count]
,[PreviousDueTime]貌加辶念什么
,[AfterDueTime]
,[CreateTime])
VALUES
(@PartnerId
,@AddYear
,@Count
,null
,@AfterDueTime
,@CreateTime)
declare @RenewId int =SCOPE_IDENTITY() ;
--更新旧的序列号数据
update [dbo].[PartnerSerialKey] t [RenewId]=@RenewId
where [RenewId]=0 AND [PartnerId]=@PartnerId
--更新旧的已使⽤序列号数据
update [dbo].[PartnerSerialKey] t [ExpirationDate]=dateadd( year,@AddYear, @CreateTime) -- 邵昌学说以当前时间后推⼀年不使⽤ [UTime] where [IsU]=1 AND [PartnerId]=@PartnerId and [RenewId]=@RenewId
where [IsU]=1 AND [PartnerId]=@PartnerId and [RenewId]=@RenewId
定格在记忆中的画面作文----------正常逻辑 end
print @name;
end
--记得将独⽴端的续费记录同步到我们正式服务器
--------记录异常
t @a=@a+1
t @error= @error + @@ERROR --记录每次运⾏sql后是否正确,0正确
FORNEXT: fetch next from order_cursor into @PartnerId,@time,@name --转到下⼀个游标 end
if @error=0
begin
双11购物狂欢节
commit tran --提交事务
end
el
渡易水begin摘英语
rollback tran --回滚事务
end
clo order_cursor --关闭游标
deallocate order_cursor --释放游标
end
go