存储过程,更新消耗和消耗日期逻辑

时间:2017-09-15 13:24:58

标签: sql-server stored-procedures

我陷入了这种情况,我需要更新员工的加班积分。一旦批准了抵消请求,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中都有许多条目。员工的总OvertimeCredits可以通过使用来自OvertimeCredits表的ID来获得,其中id等于员工ID。

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

请看这个小提琴:
http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=426411d4ace6e374ddd3916a05a8f03a

1 个答案:

答案 0 :(得分:0)

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