SQL Server中在存储过程中使用游标修改表中数据
2016-06-02 21:10
441 查看
首先,需要创建两张表attendance表和wages表
现在要创建一个存储过程计算所有员工的实发工资,那么需要在该存储过程中声明一个游标,遍历attendance表中的每条记录,将数据取出,并计算对应员工的各类工资,并修改wages表
create table wages( Eno varchar(20),--员工号 Basewage double,--基本工资 Overtimewage double,--加班工资 Deductwage double,--扣除工资 Bonuswage double,--奖金 Txyjwage double,--五险一金 Totalwage double--实发工资 )
create table attendance( Eno varchar(20),--员工号 late int,--迟到早退小时数 overtime int,--加班小时数 leave int,--请假小时数 m_late int,--迟到每小时扣款 m_over int,--加班每小时金额 m_leave int--请假每小时扣款 )
现在要创建一个存储过程计算所有员工的实发工资,那么需要在该存储过程中声明一个游标,遍历attendance表中的每条记录,将数据取出,并计算对应员工的各类工资,并修改wages表
create procedure calcuwage --存储过程里面放置游标 as begin declare UpdateWageCursor cursor --声明一个游标,查询出勤表的数据 for select Eno,late,overtime,leave,m_late,m_over,m_leave from attendance open UpdateWageCursor --打开 --声明多个变量,用于读取游标中的值 --以下各个字段应与attendance表中相应字段的数据类型相同 declare @Eno varchar(20), @late int, @overtime int, @leave int, @m_late int, @m_over int, @m_leave int --将出勤表数据逐条放到变量中 fetch next from UpdateWageCursor into @Eno, @late, @overtime, @leave, @m_late, @m_over, @m_leave while @@fetch_status=0 --循环读取 begin --根据员工号更新wages表的字段 update wages set Overtimewage = @overtime * @m_over, Deductwage = @late * @m_late + @leave * @m_leave, Totalwage = Basewage + @overtime * @m_over - @late * @m_late + @leave * @m_leave + Bonuswage - Txyjwage where Eno = @Eno; fetch next from UpdateWageCursor into @Eno, @late, @overtime, @leave, @m_late, @m_over, @m_leave end close UpdateWageCursor; --关闭 --deallocate UpdateWageCursor; --删除 end --exec UpdateWageCursor;--执行存储过程
相关文章推荐
- SQL中的三值逻辑
- mongo实现消息队列
- SQL Server 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- SQL Server 语句操纵数据库
- SQL(结构化查询语句)
- oracle sql日期比较
- linux快速部署mysql服务器
- sql 存储过程分页
- 在WINXP系统上安装SQL Server企业版的方法
- 通过批处理调用SQL的方法(osql)
- SQL Server 存储过程的分页
- ASP程序与SQL存储过程结合使用详解
- SQL SERVER编写存储过程小工具
- 防御SQL注入攻击时需要注意的一个问题
- Microsoft Sql server2005的安装步骤图文详解及常见问题解决方案
- PostgreSQL教程(十九):SQL语言函数