在 table 中存储动作的时间戳

store timestamp of an action in a table

我在这里有一个问题:

alter proc  spbadge
  @WeekNumber nvarchar(255)
 as
 begin

 update pointsbadge
 set 
 
     badge1 =(case when WeeklyHoursLogged >= '40' then 1 else 0 end),
    badge2 = (case when WeeklyHoursLogged<'40' then 1 else 0 end),
    badge3 = (case WHEN WeeklyHoursLogged >= 50 and WeeklyHoursLogged < 55 THEN '1' else 0 end),
    badge4 = (case WHEN WeeklyHoursLogged >= 55 and WeeklyHoursLogged < 60 THEN '1' else 0 end),
   badge5 = (case WHEN WeeklyHoursLogged >= 60  THEN '1' else 0 end);

end

现在,在 运行 上面的条件查询之后,我更新了这个 "pointsBadge" table -

场景: 在这里您将看到 5 个徽章(徽章 1 到徽章 5)。当任何员工获得徽章时,它变为 1,否则为 0。例如:Brinda 赢得所有徽章,而 lyka 仅赢得徽章 1。

问题 :我想要另一个 table "employee_badge" - 每当任何员工获得徽章奖励时,即每当她的值为 1 时,在这个 "employee_badge" table 中,employeeid,badgeid 和时间被记录下来。

比如像这样,

我将徽章的图像和 ID 存储在不同的 table 中,如下所示:

你们认为这会怎样 achieved.can 我修改了上面的存储过程或者你提出了一个更有效的解决方案。我相信我需要使用更新触发器 here.But ,如何我会在上面的存储过程中使用它吗?

请检查以下代码,如果它满足您的要求:您可以根据您的table结构和数据调整查询

--徽章点信息

CREATE TABLE pointsBadge(EmployeeName VARCHAR(50), EmployeeID INT, badge1 INT, badge2 INT, badge3 INT, badge4 INT, badge5 INT)
INSERT INTO pointsBadge VALUES 
('Lyka', 1122, 1, 1, 0, 0, 0),
('Brinda', 2233, 0, 0, 0, 0, 0),
('Anil', 34, 1, 1, 0, 0, 1)

--新 table 以员工明智的方式存储带有当前时间戳的徽章数据

CREATE TABLE employee_badge(id INT IDENTITY(1,1), employee_id INT, badge_id INT, earned_on DATETIME)

--徽章信息Table

CREATE TABLE #badges(BadgeId INT IDENTITY(1, 1), BadgeName VARCHAR(50))
INSERT INTO #badges VALUES 
('Badge1'),
('Badge2'),
('Badge3'),
('Badge4'),
('Badge5'),
('Badge6')

--触发插入数据到employee_badge table with updated data

IF OBJECT_ID('[dbo].[TRGUpdate_badge_info]', 'TR') IS NOT NULL
    DROP TRIGGER dbo.TRGUpdate_badge_info
GO

CREATE TRIGGER dbo.TRGUpdate_badge_info ON dbo.pointsBadge
FOR UPDATE
AS
    INSERT INTO employee_badge
    SELECT d.EmployeeID,
            b.BadgeId,
            GETDATE()
    FROM pointsBadge p
    INNER JOIN DELETED d ON p.EmployeeID = d.EmployeeID
    INNER JOIN #badges b ON b.BadgeName = CASE WHEN (p.badge1 <> d.badge1) THEN 'Badge1'
                                                WHEN (p.badge2 <> d.badge2) THEN 'Badge2'
                                                WHEN (p.badge3 <> d.badge3) THEN 'Badge3'
                                                WHEN (p.badge4 <> d.badge4) THEN 'Badge4'
                                                WHEN (p.badge5 <> d.badge5) THEN 'Badge5' 
                                           END
GO

UPDATE pointsBadge SET badge5 = 2 WHERE employeeID = 1122

SELECT * FROM employee_badge