什么都不会的乔木 2022-12-26 17:17 采纳率: 75%
浏览 59
已结题

数据库存储过程工资信息查询

自己写的代码有人能帮改一下吗
存储过程3:工资信息查询
写存储过程查询教职工工资
输入:员工号、发放年月
输出:应发工资是否正确,如正确,Return 1;不正确,Return 状态0,并修改工资信息(含基本工资、课时费、应发工资)。
注:根据输入的年月判断当前的学期,如输入2021-04,则为2021年第一学期(1-6月为当年第1学期,7-12月为当年第二学期),根据学期判断教师带教学班的授课时数来计算工资。工资计算公式如下:
应发工资 = 基本工资 +课时费(提示:每月课时费是学期总课时费平均到每个月)
基本工资:讲师(1000),副教授(1500),教授(2000)
课时费 = 每课时工资 × 课时数 (提示:课时数是教师本学期所教授每门课程课时总和/6个月)
每课时工资:讲师(80),副教授(90),教授(100)
如果是普通职员,则基本工资为3000,课时费为0。

 alter proc 工资信息查询
@员工号 char(10),
@发放年月 char(20)
as
begin try
     if exists(select * from Wages where  wagesdata=@发放年月)
     if exists (select * from Employee where EmployeeID=@员工号)
     begin
        declare @应发工资 int set @应发工资=0
        declare @类型 char(10)
        declare @职称 char(10)
        declare @课时数 float 
        select @课时数 from Course join Kaike on Course.CourseID=Kaike.CourseID where xueshi/6=@课时数 and EmployeeID=@员工号
        if exists( select payable=@应发工资 from Wages join Employee on Wages.EmployeeID=Employee.EmployeeID
        join Class on Class.EmployeeID=Employee.EmployeeID     where payable=3000 and 
        leibie=(select leibie=@类型 from Employee join Class on Class.EmployeeID=Employee.EmployeeID 
        where @员工号= Employee.EmployeeID and leibie ='职员') )
        begin
            return 1
        end
        else
            return 0
            update Wages set Basew=3000
            update Wages set hourw=0
            update Wages set payable=3000
        if exists(select  payable=@应发工资 from Wages join Employee on Wages.EmployeeID=Employee.EmployeeID 
        join Teacher on Teacher.EmployeeID=Employee.EmployeeID where Basew=1000 and 
        title=(select title=@职称 from Teacher where title='讲师') )
        begin
          
              return 1
        end
        else
              return 0
              update Wages set Basew=1000
              update Wages set hourw=80*@课时数
              update Wages set payable=1000+80*@课时数
        if exists(select  payable=@应发工资 from Wages join Employee on Wages.EmployeeID=Employee.EmployeeID 
        join Teacher on Teacher.EmployeeID=Employee.EmployeeID where Basew=1500 and 
        title=(select title=@职称 from Teacher where title='副教授') )
        begin
              return 1
        end
        else
              return 0
              update Wages set Basew=1500
              update Wages set hourw=90*@课时数
              update Wages set payable=1500+90*@课时数
        if exists(select  payable=@应发工资 from Wages join Employee on Wages.EmployeeID=Employee.EmployeeID 
        join Teacher on Teacher.EmployeeID=Employee.EmployeeID where Basew=2000 and 
        title=(select title=@职称 from Teacher where title='教授') )
        begin
              return 1
        end
        else
              return 0
              update Wages set Basew=2000
              update Wages set hourw=100*@课时数
              update Wages set payable=2000+100*@课时数
        end
        

end try
begin catch 
        print'error'
end catch
  • 写回答

1条回答 默认 最新

  • WaitIKnowYou 2022-12-27 11:28
    关注
    
    CREATE PROCEDURE 工资信息查询
        @员工号 char(10),
        @发放年月 char(20)
    AS
    BEGIN
        DECLARE @应发工资 INT
        DECLARE @类型 CHAR(10)
        DECLARE @职称 CHAR(10)
        DECLARE @课时数 FLOAT
        DECLARE @基本工资 INT
        DECLARE @每课时工资 INT
        DECLARE @课时费 FLOAT
    
        -- 首先根据员工号和发放年月查询工资信息
        SELECT @应发工资 = payable
        FROM Wages
        WHERE EmployeeID = @员工号 AND wagesdata = @发放年月
    
        -- 如果工资信息不存在,则返回 0
        IF @应发工资 IS NULL
        BEGIN
            RETURN 0
        END
    
        -- 否则,继续查询员工的其他信息
        SELECT @类型 = Type, @职称 = Title
        FROM Employee
        WHERE EmployeeID = @员工号
    
        -- 如果员工是教师,则计算课时数
        IF @类型 = '教师'
        BEGIN
            -- 查询教师在当前学期所教授的课程的课时数总和
            SELECT @课时数 = SUM(Course.xueshi) / 6
            FROM Course
            JOIN Kaike ON Course.CourseID = Kaike.CourseID
            WHERE EmployeeID = @员工号
            AND Course.xueshi / 6 = @发放年月
    
            -- 根据教师职称计算基本工资
            IF @职称 = '讲师'
            BEGIN
                SET @基本工资 = 1000
                SET @每课时工资 = 80
            END
            ELSE IF @职称 = '副教授'
            BEGIN
                SET @基本工资 = 1500
                SET @每课时工资=90
    ELSE IF @职称 = '教授'
        BEGIN
            SET @基本工资 = 2000
            SET @每课时工资 = 100
        END
    
        -- 计算课时费
        SET @课时费 = @每课时工资 * @课时数
    END
    
    -- 否则,如果员工是普通职员,则基本工资为3000,课时费为0
    ELSE
    BEGIN
        SET @基本工资 = 3000
        SET @课时费 = 0
    END
    
    -- 计算应发工资
    SET @应发工资 = @基本工资 + @课时费
    
    -- 更新工资信息
    UPDATE Wages
    SET payable = @应发工资, salary = @基本工资, classhoursfees = @课时费
    WHERE EmployeeID = @员工号 AND wagesdata = @发放年月
    
    -- 返回 1 以表示操作成功
    RETURN 1
    END
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答