首先,需要创建两张表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;--执行存储过程