⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 无标题1.sql

📁 自己做过的一个关于SQL数据库的课程设计
💻 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 + -