【发布时间】:2012-08-28 07:12:37
【问题描述】:
我正在做一个名为“考勤管理系统”的项目
公司有自己的生物指纹扫描仪,用于检查员工的出勤情况并存储在数据库表中。
表格由(ID autonumber, EmployeeNo, CheckTime and CheckType)4个字段组成
Timekeeping系统存储所有员工的日志和考勤,但它没有指定checktype是“I”还是“O”。如下图所示,员工每次登录,系统都会自动存入数据库,但存为“I”,当同一员工再次登录时,会再次存为“I”。
我的客户希望它尽可能自动化。一旦员工再次登录,他想将检查类型更改为“O”。
例如:
我是一名员工。我今天早上8点登录,然后它会存储到数据库中
今天上午 8 点,检查类型为“I”.. 因为我不知道我已经登录,所以我在上午 8:04 再次登录了第二次.. 系统再次将其存储为“I”好像我要在下午5点登出,系统也记录为“我”..
我希望它自动更新数据库。无需用户提供任何参数。我希望它在一个存储过程中以自动化该过程。
应限制在同一员工内: 示例:
Employee1 今天早上 8 点登录..(检查类型“I”) Employee1 在今天上午 11 点再次登录......(检查类型“O”) 员工 1 在今天中午 12 点再次登录..(检查类型“I”) employee1 在今天下午 4 点再次登录(检查类型“O”)
标准应限制在员工编号内,仅限检查时间。并且还希望根据给定数据更新检查类型。
旧系统无法将登录信息存储为“O”,它纯粹是“I”..
如何做到这一点?我需要你的投入和帮助!请问?
我创建了一个存储过程,但不知道在哪里可以启动它,而且我不知道完成该过程并使其工作..
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE AUTOMATIC_OVERRIDE
@ID INT,
@EMPLOYEENO NVARCHAR(20),
@CHECKTIME DATETIME,
@CHECKTYPE NVARCHAR(1)
AS
SET NOCOUNT ON;
WHILE @ID = (SELECT ID FROM CHECKTIME)
SELECT ID,EMPLOYEENO,CHECKTIME,CHECKTYPE
FROM CHECKTIME
GROUP BY ID,EMPLOYEENO,CHECKTIME,CHECKTYPE
ORDER BY CHECKTIME
GO
请帮我解决这个问题。谢谢。
【问题讨论】:
-
所以基本上你想要的是为单个员工交替
In and Out结帐,这样就可以知道什么时候进来和什么时候出去。 -
是的……但我做不到……你能帮帮我吗?
-
T&A 是一个相当复杂的过程,通常通过一个或多个班次模式进行管理。这使得将时间映射到来自时钟系统的数据变得更加容易。处理时钟时间的规则是什么?如果您在 0800 和 0804 打卡,那将是实际开始时间?
-
@u07ch ,如果我在 0800 打卡,那么开始时间会晚点..
-
检查我的答案,编辑添加修改代码和更新 SQL Fiddle 代码以满足您的日期期望。
标签: sql sql-server stored-procedures insert time-and-attendance