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

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

ibeautiful
浏览 113回答 3
3回答

慕容3067478

fetch next from mycursor into @O_ID,@A_Salarywhile(@@fetch_status = 0)beginUpdate OriginSalary set O_Salary=O_Salary+@A_Salary where O_ID=@O_IDfetch next from mycursor into @O_ID,@A_Salaryend假设表tempTableid,text1,T12,T23,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=0while(i<100){i++;这里是i循环,你的问题是提取数据的循环,意思是一样的}}

萧十郎

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

慕标5832272

begin end 里是循环,目的是循环取游标
打开App,查看更多内容
随时随地看视频慕课网APP