📄 无标题1.sql
字号:
--此存储过程根据tblAttendance(考勤)表信息按月更新tblSalary(薪资)
--表的AbsenceSalary(缺勤工资)列
alter proc 按月更新
@时间 int
as
declare @编号 varchar(3),@基本工资 float,@每个员工总缺勤小时数 float,@缺勤扣除 float
declare cur cursor
for
select dbo.tblAttendance员工的缺勤信息.编号,基本工资,sum(缺勤小时数) as 每个员工总缺勤小时数 from dbo.tblAttendance员工的缺勤信息,dbo.tblSalary员工每月的工资信息
where dbo.tblSalary员工每月的工资信息.编号=dbo.tblAttendance员工的缺勤信息.编号
group by dbo.tblAttendance员工的缺勤信息.编号,基本工资
select 缺勤日期 from dbo.tblAttendance员工的缺勤信息 where @时间=month(缺勤日期)
open cur
set @缺勤扣除=(select 缺勤小时数*10 from dbo.tblAttendance员工的缺勤信息 )
fetch next from cur into @编号,@基本工资,@每个员工总缺勤小时数
while @@fetch_status=0
begin
update dbo.tblSalary员工每月的工资信息 set 基本工资=(基本工资+加班工资-@缺勤扣除)
fetch next from cur into @编号,@基本工资,@每个员工总缺勤小时数
print '编号'+@编号+'基本工资'+@基本工资+'每个员工总缺勤小时数'+@每个员工总缺勤小时数
end
close cur
deallocate cur
exec 按月更新 @时间=11
select * from dbo.tblAttendance员工的缺勤信息
alter trigger 请假申请时触发
on dbo.tblLeave员工的请假记录
for update,insert
as
if update(申请状态)
declare @a varchar(10),@b varchar(10)
begin
set @a=(select 申请状态 from inserted where 申请状态='已批准')
if(@a='已批准')
begin
set @b=(select 请假类型 from inserted )
if (@b='折算成津贴')
begin
update dbo.tblSalary员工每月的工资信息
set 缺勤扣除=(select tblLeave员工的请假记录.请假小时数*10+dbo.tblSalary员工每月的工资信息.缺勤扣除
from tblLeave员工的请假记录,tblSalary员工每月的工资信息,inserted
where tblSalary员工每月的工资信息.编号=inserted.编号)
update dbo.tblSalary员工每月的工资信息
set 缺勤扣除=(select tblSalary员工每月的工资信息.缺勤扣除-tblLeave员工的请假记录.请假小时数*10
from tblLeave员工的请假记录,tblSalary员工每月的工资信息,deleted
where tblSalary员工每月的工资信息.编号=deleted.编号 )
end
else if(@b='折算成年假')
begin
update tblEmployee员工基本信息
set 剩余假期=(select 剩余假期-dbo.tblLeave员工的请假记录.请假小时数
from inserted,dbo.tblLeave员工的请假记录
where inserted.编号=tblEmployee员工基本信息.编号)
update tblEmployee员工基本信息
set 剩余假期=(select 剩余假期+dbo.tblLeave员工的请假记录.请假小时数
from deleted,dbo.tblLeave员工的请假记录
where deleted.编号=tblEmployee员工基本信息.编号)
end
end
end
update dbo.tblLeave员工的请假记录 set 申请状态='已批准'
where 编号='004'
select * from dbo.tblEmployee员工基本信息
where 编号='004'
CREATE trigger trUpdateOvertime
on dbo.员工的加班记录
for update
as
declare @申请状态 varchar(50),@加班类型 varchar(50),
@加班工资 float,@员工剩余假期 varchar(10)
set @申请状态=(select 申请状态 from inserted)
if @申请状态='已批准'
begin
set @加班类型=(select 加班类型 from inserted)
if @加班类型='折算成津贴'
begin
update 员工每月的工资信息
set 加班工资=(select 加班小时数*5 from inserted)
where 员工编号=(select 员工编号 from inserted)
end
if @加班类型='折算成年假'
begin
update 员工基本信息
set 员工剩余假期=(select 员工剩余假期+加班小时数 from inserted)
where 员工编号=(select 员工编号 from inserted)
end
end
select * from inserted
select * from deleted
update 员工的加班记录 set 申请状态='已批准'
where 编号='004'
alter trigger 加班申请时触发1
on dbo.tblOvertime员工的加班记录
for update
as
if update(申请状态)
declare @a varchar(10),@b varchar(10)
begin
set @a=(select 申请状态 from inserted where 申请状态='已批准')
if(@a='已批准')
begin
set @b=(select 加班类型 from inserted )
if (@b='折算成津贴')
begin
update tblSalary员工每月的工资信息
set 加班工资=(select 100 * tblOvertime员工的加班记录.加班小时数+加班工资
from tblSalary员工每月的工资信息,
tblOvertime员工的加班记录,inserted
where tblSalary员工每月的工资信息.编号= inserted.编号)
update tblSalary员工每月的工资信息
set 加班工资=(select 加班工资-tblOvertime员工的加班记录.加班小时数*100
from tblSalary员工每月的工资信息,
tblOvertime员工的加班记录,deleted
where tblSalary员工每月的工资信息.编号=deleted.编号)
end
else if(@b='折算成年假')
begin
update tblEmployee员工基本信息
set 剩余假期=(select 加班小时数+剩余假期
from inserted,dtblOvertime员工的加班记录
where inserted.编号=tblEmployee员工基本信息.编号)
update tblEmployee员工基本信息
set 剩余假期=(select 剩余假期-加班小时数
from deleted,dtblOvertime员工的加班记录
where deleted.编号=tblEmployee员工基本信息.编号)
end
end
end
select * from dbo.tblLeave员工的请假记录
exec
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -