为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要在BEGIN和END里面再写一遍 ?

为什么要在BEGIN和END里面再写一遍 ?

ibeautiful 2022-09-17 15:11:14

CREATE PROCEDURE PK_SalaryAdd
AS
declare @O_ID nvarchar(20),@A_Salary float
declare mycursor cursor for select O_ID,A_Salary from AddSalary
open mycursor
fetch next from mycursor into @O_ID,@A_Salary
while(@@fetch_status = 0)
begin
Update OriginSalary set O_Salary=O_Salary+@A_Salary where O_ID=@O_ID
fetch next from mycursor into @O_ID,@A_Salary
end
close mycursor
deallocate mycursor
GO

查看完整描述

3 回答

?
慕容3067478

TA贡献1461条经验 获得超3个赞

fetch next from mycursor into @O_ID,@A_Salary
while(@@fetch_status = 0)
begin
Update OriginSalary set O_Salary=O_Salary+@A_Salary where O_ID=@O_ID
fetch next from mycursor into @O_ID,@A_Salary
end
假设表tempTable
id,text
1,T1
2,T2
3,T3
面代码省略,现在一句一句看fetch next from mycursor into @O_ID,@A_Salary(1)
fetch into 是移动游标提取数据。(1)句就是把第一行两列数据放到@O_ID,@A_Salary中,游标提留在第一行
while(@@fetch_status = 0)
{
--正常来说你要在这里循环提取每行数据,不然不会用到游标这个概念。
Begin end是什么?Begin就是“{”,END就是“}”
说到这了 你说为什么要写在{}里?如果不写,游标只停留在第一行,不是吗?
好比什么呢?就好比
int i=0
while(i<100)
{
i++;这里是i循环,你的问题是提取数据的循环,意思是一样的
}
}


查看完整回答
反对 回复 2022-09-21
?
萧十郎

TA贡献1474条经验 获得超11个赞

查询出来的结果如果有多个记录的话,执行完一条update语句后需要返回下一条记录,要重新把游标赋值,不然的话会出现死循环,这条是必须的

查看完整回答
反对 回复 2022-09-21
?
慕标5832272

TA贡献1628条经验 获得超4个赞

begin end 里是循环,目的是循环取游标

查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信