2017-09-15 68 views
1

我被困在这种情况下,我需要更新员工的加班积分。在批准Offset请求后,加班费将根据OvertimeCredits表更新。存储过程,更新消耗和日期消耗逻辑

CTORequest表

CREATE TABLE CTORequest 
(
    CTORequestID INT 
    , EmployeeID INT 
    , ApproverID INT 
    , CTOStatusID INT 
    , DateCreated DATETIME 
    , CTOStartDatetime DATETIME 
    , CTOEndDatetime DATETIME 
    , NoOfHours REAL 
    , ReportBackToWork DATETIME 
    , Reason VARCHAR(250) 
    , Remarks VARCHAR(MAX) 
    , DateProcessed DATETIME 
) 

OvertimeCredits表

CREATE TABLE OvertimeCredits 
(
    OvertimeCreditsID INT 
    , EmployeeID INT 
    , OvertimeID INT 
    , OvertimeCredits FLOAT 
    , DateExpired DATETIME 
    , IsExpired BIT 
    , Consumed FLOAT 
    , DateConsumed DATETIME 
) 

在用于偏移的请求时,存在用于NoOfHours一列。这个NoOfHours将被扣除到OvertimeCredits表。请注意,每位员工在OvertimeCredits中都有许多条目。员工的Total OvertimeCredits可以通过使用OvertimeCredits表中的id来获得,其中id等于员工ID。

如果NoOfHours大于员工OvertimeCredits的总和,则无需验证。只有更新逻辑。

请参阅此琴:
http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=426411d4ace6e374ddd3916a05a8f03a

回答

0

您可以通过为NoOfHours列上创建的CTORequest表 的更新触发,处理这个过程。在该触发器的主体中,为表OverTimeCredits上的必要操作编写逻辑代码。你可以在SQL SERVER文档中找到很多示例代码。