需求:现在有2张表,一张是gongzi表--工资表,有2个字段ID 员工号(int)、gongzi工资(money);另一张表addgongzi表—加薪表。有2个字段,ID员工号、addgongzi增加工资。两张表的ID是一一对应的,现在求将加薪的工资+原来的工资=现在的工资,也就是gongzi=gongzi+addgongzi,修改表gongzi的工资字段。
这个问题用程序来实现很简单,但是咱们今天不说程序,就说游标:
游标的好处:
1、允许定位在结果集的特定行
2、从结果集的当前位置检索一行或一部分行
3、支持对结果集总当前位置的行进行数据修改
4、为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持
5、提供脚本储存过程和触发器中用于访问结果集数据的T-SQL语句
游标的基本操作:
1、声明游标
2、打开游标
3、读取游标
4、关闭游标
5、删除游标
本例解决方法,为执行方便,我使用了存储过程
--新建储存过程proc_addgongzi create PROCEDURE proc_addgongzi AS --声明游标 DECLARE cur_addgongzi CURSOR for select * from addgongzi --声明变量 DECLARE @ID int DECLARE @addgongzi money --打开游标 open cur_addgongzi --读取游标 fetch next from cur_addgongzi into @ID,@addgongzi while (@@fetch_status=0) begin --修改数据 update gongzi set gongzi=gongzi+@addgongzi where ID=@ID --修改完成后继续读取游标 fetch next from cur_addgongzi into @ID,@addgongzi end --关闭游标 close cur_addgongzi --删除游标 deallocate cur_addgongzi
执行结果:
over