我想设计一个工资管理系统,但是到计算工资得部分卡住了,我设计了一个出勤表(当然还有其它相关的表)和工资表,结构如下:
出勤表
员工编号     加班小时数 请假天数  迟到早退次数   旷工次数 出差天数
000000        1           2             0           0      0
工资表 
员工编号   基本工资 每小时加班费  总加班费  每一天请假扣费 请假总扣费  每次迟到扣费  迟到总扣费 每次旷工扣费 旷工总扣费     每一天出差补贴   总出差补贴   实发工资
000000      1500      100            100          30               60     10             0          30        
    0             80                0
怎样用存储过程实现在工资表输入上述数据联系出勤表的数据自动在实发工资列里计算出结果?另:自定义函数不知道行不行?                   

解决方案 »

  1.   

    输入上述数据联系出勤表的数据自动在实发工资列里计算出结果
    ===》
    似乎可以利用触发器
    Create trigger tri_test on 工资表
    after insert
    as
    begin
      Update  A
       set 总加班费= B.每小时加班费 * C.加班小时数 ,
          请假总扣费=B.每一天请假扣费 * C.请假天数 ,
           迟到总扣费=B.每次迟到扣费 * C.迟到早退次数,
           旷工总扣费=B.每次旷工扣费 * C.旷工次数,
           总出差补贴=B.每一天出差补贴 * C.出差天数 ,
           实发工资 = B.基本工资 + (B.每小时加班费 * C.加班小时数) + (B.每一天出差补贴 * C.出差天数)
                     -(B.每一天请假扣费 * C.请假天数)-(B.每次迟到扣费 * C.迟到早退次数)-(B.每次旷工扣费 * C.旷工次数)
      from 工资表 A, inserted B, 出勤表 C
      where A.员工编号=B.员工编号
        and A.员工编号=C.员工编号
    end
      

  2.   

    如果楼主要的是计算列,
    类似于
    create table test
    (
    a int ,
    b int ,
    c as (a+b)
    )
    中的c列这样的定义形式,是不行的,计算列只能引用本表中的列。
    采用4楼的方法是个不错的选择
    另外,象这种需要计算的且列值不固定的情况,也可以不用形成一列,需要的时候联查再进行计算也要以的
    例如select 
        总加班费= B.每小时加班费 * C.加班小时数 ,
          请假总扣费=B.每一天请假扣费 * C.请假天数 ,
           迟到总扣费=B.每次迟到扣费 * C.迟到早退次数,
           旷工总扣费=B.每次旷工扣费 * C.旷工次数,
           总出差补贴=B.每一天出差补贴 * C.出差天数 ,
           实发工资 = B.基本工资 + (B.每小时加班费 * C.加班小时数) + (B.每一天出差补贴 * C.出差天数)
                     -(B.每一天请假扣费 * C.请假天数)-(B.每次迟到扣费 * C.迟到早退次数)-(B.每次旷工扣费 * C.旷工次数)
      from 工资表 A, inserted B, 出勤表 C
      where A.员工编号=B.员工编号
        and A.员工编号=C.员工编号
      

  3.   

    出勤表 
    create table TT1(员工编号 nvarchar(20),加班小时数 int ,请假天数 int , 迟到早退次数  int ,旷工次数 int ,出差天数 int)insert TT1
    select '000000',1 , 2 , 0 , 0 , 0工资表 
    create table TT2(员工编号 nvarchar(20),基本工资 money,每小时加班费 money, 总加班费 money, 
     每一天请假扣费 money, 请假总扣费 money,  每次迟到扣费 money,  迟到总扣费 money,
     每次旷工扣费 money, 旷工总扣费 money,    每一天出差补贴 money, 总出差补贴 money,  实发工资 money)insert  TT2(员工编号,基本工资,每小时加班费,每一天请假扣费,每次迟到扣费,每次旷工扣费,每一天出差补贴)
    select '000000',1500,100,30,10,30,80 
    Create trigger tri_test on TT2
    for insert
    as
    begin
      update  A
       set 总加班费= B.每小时加班费*C.加班小时数 ,
           请假总扣费=B.每一天请假扣费 * C.请假天数 ,
           迟到总扣费=B.每次迟到扣费 * C.迟到早退次数,
           旷工总扣费=B.每次旷工扣费 * C.旷工次数,
           总出差补贴=B.每一天出差补贴 * C.出差天数 ,
           实发工资 = B.基本工资 + (B.每小时加班费 * C.加班小时数) + (B.每一天出差补贴 * C.出差天数)
                     -(B.每一天请假扣费 * C.请假天数)-(B.每次迟到扣费 * C.迟到早退次数)-(B.每次旷工扣费 * C.旷工次数)
      from TT2 A, inserted B, TT1 C
      where A.员工编号=B.员工编号
        and A.员工编号=C.员工编号
    endselect * from TT2员工编号 基本工资 每小时加班费 总加班费 每一天请假扣费 请假总扣费 每次迟到扣费 
    迟到总扣费 每次旷工扣费 旷工总扣费 每一天出差补贴 总出差补贴 实发工资
    000000 1500.00 100.00 100.00 30.00 60.00 10.00 0.00 30.00 0.00 80.00 0.00 1540.00(1 行受影响)