标签:
CREATE TABLE [dbo].[Hr](
[部门] [nvarchar](255) NULL,
[姓名] [nvarchar](255) NULL,
[考勤号码] [nvarchar](255) NULL,
[日期时间] [datetime] NULL,
[日期] [datetime] NULL,
[时间] [datetime] NULL,
[记录状态] [nvarchar](255) NULL,
[F8] [nvarchar](255) NULL,
[机器号] [nvarchar](255) NULL,
[编号] [nvarchar](255) NULL,
[工种代码] [nvarchar](255) NULL,
[比对方式] [nvarchar](255) NULL,
[卡号] [nvarchar](255) NULL,
[考勤] [nvarchar](255) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Hr_1](
[姓名] [nvarchar](50) NULL,
[考勤号码] [nvarchar](50) NULL,
[日期时间] [datetime] NULL,
[上班打卡_A] [datetime] NULL,
[下班打卡_A] [datetime] NULL,
[备注] [nvarchar](50) NULL,
[上班打卡_P] [datetime] NULL,
[下班打卡_P] [datetime] NULL,
[上班打卡_E] [datetime] NULL,
[下班打卡_E] [datetime] NULL,
CONSTRAINT [Unique_Hr_1] UNIQUE NONCLUSTERED
(
[考勤号码] ASC,
[日期时间] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-----------------------------------
ALTER PROCEDURE [dbo].[Hr_addNewMonth]
as
BEGIN
INSERT INTO [Hr_1]
([日期时间],[姓名]
,[考勤号码])
select distinct CONVERT(char(10),日期时间,120) as atime,姓名,考勤号码 from Hr a
where (select COUNT(*) from [Hr_1] b where b.考勤号码 = a.考勤号码 and b.日期时间 = CONVERT(char(10),a.日期时间,120) ) < 1
order by a.姓名,CONVERT(char(10),a.日期时间,120)
END
---------------------------
---上午上班打卡
ALTER PROCEDURE [dbo].[Hr_Update1]
AS
DECLARE @wkdatetime1 datetime --时间
DECLARE @wk_no varchar(20) --工号
DECLARE @wk_date datetime --打卡日期
DECLARE @wk_month varchar(20) --打卡月份
DECLARE @row_count int --记录行数
BEGIN
set @wk_month =‘2015-01‘ ---设置计算初值
DECLARE cur_wkno_input CURSOR FOR
select distinct 考勤号码 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month
OPEN cur_wkno_input
FETCH cur_wkno_input INTO @wk_no
WHILE @@FETCH_STATUS = 0
BEGIN
-----按工号循环
DECLARE cur_wk_date_input CURSOR FOR
select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
OPEN cur_wk_date_input
FETCH cur_wk_date_input INTO @wk_date
WHILE @@FETCH_STATUS = 0
BEGIN
--select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ‘ 09:00:00‘,101);
--select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ‘ 09:00:00‘,101);
-----按日期循环
set @row_count = 0
SELECT @row_count = count(*) from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and 日期时间 <
CONVERT(datetime,@wk_date + ‘ 09:00:00‘,101)
if @row_count > 0
BEGIN
set @wkdatetime1 = (select top 1 日期时间 from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and 日期时间 <
CONVERT(datetime,@wk_date + ‘ 09:00:00‘,101) order by 日期时间)
update [Hr_1] set 上班打卡_A = @wkdatetime1 where 考勤号码 = @wk_no and 日期时间 = @wk_date and 上班打卡_A is null
end
-----按日期循环
FETCH cur_wk_date_input INTO @wk_date
end
CLOSE cur_wk_date_input
DEALLOCATE cur_wk_date_input
-----按工号循环
FETCH cur_wkno_input INTO @wk_no
end
CLOSE cur_wkno_input
DEALLOCATE cur_wkno_input
END
--------------------------
---上午下班打卡
ALTER PROCEDURE [dbo].[hr_Update2]
AS
DECLARE @wkdatetime1 datetime --时间
DECLARE @wk_no varchar(20) --工号
DECLARE @wk_date datetime --打卡日期
DECLARE @wk_month varchar(20) --打卡月份
DECLARE @row_count int --记录行数
BEGIN
set @wk_month =‘2015-01‘ ---设置计算初值
DECLARE cur_wkno_input CURSOR FOR
select distinct 考勤号码 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month
OPEN cur_wkno_input
FETCH cur_wkno_input INTO @wk_no
WHILE @@FETCH_STATUS = 0
BEGIN
-----按工号循环
DECLARE cur_wk_date_input CURSOR FOR
select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
OPEN cur_wk_date_input
FETCH cur_wk_date_input INTO @wk_date
WHILE @@FETCH_STATUS = 0
BEGIN
--select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ‘ 09:00:00‘,101);
--select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ‘ 09:00:00‘,101);
-----按日期循环
set @row_count = 0
SELECT @row_count = count(*) from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 11:30:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 14:10:00‘,101)
if @row_count > 0
BEGIN
set @wkdatetime1 = (select top 1 日期时间 from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 11:30:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 14:10:00‘,101) order by 日期时间 )
update [Hr_1] set 下班打卡_A = @wkdatetime1 where 考勤号码 = @wk_no and 日期时间 = @wk_date and 下班打卡_A is null
end
-----按日期循环
FETCH cur_wk_date_input INTO @wk_date
end
CLOSE cur_wk_date_input
DEALLOCATE cur_wk_date_input
-----按工号循环
FETCH cur_wkno_input INTO @wk_no
end
CLOSE cur_wkno_input
DEALLOCATE cur_wkno_input
END
-----------------------------
---下午上班打卡
ALTER PROCEDURE [dbo].[hr_Update3]
AS
DECLARE @wkdatetime1 datetime --时间
DECLARE @wk_no varchar(20) --工号
DECLARE @wk_date datetime --打卡日期
DECLARE @wk_month varchar(20) --打卡月份
DECLARE @row_count int --记录行数
BEGIN
set @wk_month =‘2015-01‘ ---设置计算初值
DECLARE cur_wkno_input CURSOR FOR
select distinct 考勤号码 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month
OPEN cur_wkno_input
FETCH cur_wkno_input INTO @wk_no
WHILE @@FETCH_STATUS = 0
BEGIN
-----按工号循环
DECLARE cur_wk_date_input CURSOR FOR
select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
OPEN cur_wk_date_input
FETCH cur_wk_date_input INTO @wk_date
WHILE @@FETCH_STATUS = 0
BEGIN
--select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ‘ 09:00:00‘,101);
--select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ‘ 09:00:00‘,101);
-----按日期循环
set @row_count = 0
SELECT @row_count = count(*) from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 11:30:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 14:10:00‘,101)
if @row_count > 0
BEGIN
set @wkdatetime1 = (select top 1 日期时间 from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 11:30:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 14:10:00‘,101) order by 日期时间 desc)
update [Hr_1] set 上班打卡_P = @wkdatetime1 where 考勤号码 = @wk_no and 日期时间 = @wk_date and 上班打卡_P is null
end
-----按日期循环
FETCH cur_wk_date_input INTO @wk_date
end
CLOSE cur_wk_date_input
DEALLOCATE cur_wk_date_input
-----按工号循环
FETCH cur_wkno_input INTO @wk_no
end
CLOSE cur_wkno_input
DEALLOCATE cur_wkno_input
END
--------------------------
---下午下班打卡
ALTER PROCEDURE [dbo].[hr_Update4]
AS
DECLARE @wkdatetime1 datetime --时间
DECLARE @wk_no varchar(20) --工号
DECLARE @wk_date datetime --打卡日期
DECLARE @wk_month varchar(20) --打卡月份
DECLARE @row_count int --记录行数
BEGIN
set @wk_month =‘2015-01‘ ---设置计算初值
DECLARE cur_wkno_input CURSOR FOR
select distinct 考勤号码 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month
OPEN cur_wkno_input
FETCH cur_wkno_input INTO @wk_no
WHILE @@FETCH_STATUS = 0
BEGIN
-----按工号循环
DECLARE cur_wk_date_input CURSOR FOR
select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
OPEN cur_wk_date_input
FETCH cur_wk_date_input INTO @wk_date
WHILE @@FETCH_STATUS = 0
BEGIN
--select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ‘ 09:00:00‘,101);
--select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ‘ 09:00:00‘,101);
-----按日期循环
set @row_count = 0
SELECT @row_count = count(*) from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 17:00:00‘,101)
if @row_count > 0
BEGIN
set @wkdatetime1 = (select top 1 日期时间 from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 17:00:00‘,101) order by 日期时间 desc)
update [Hr_1] set 下班打卡_P = @wkdatetime1 where 考勤号码 = @wk_no and 日期时间 = @wk_date and 下班打卡_P is null
end
-----按日期循环
FETCH cur_wk_date_input INTO @wk_date
end
CLOSE cur_wk_date_input
DEALLOCATE cur_wk_date_input
-----按工号循环
FETCH cur_wkno_input INTO @wk_no
end
CLOSE cur_wkno_input
DEALLOCATE cur_wkno_input
END
-----------------------
---晚上上班打卡
ALTER PROCEDURE [dbo].[hr_Update5]
AS
DECLARE @wkdatetime1 datetime --时间
DECLARE @wk_no varchar(20) --工号
DECLARE @wk_date datetime --打卡日期
DECLARE @wk_month varchar(20) --打卡月份
DECLARE @row_count int --记录行数
BEGIN
set @wk_month =‘2015-01‘ ---设置计算初值
DECLARE cur_wkno_input CURSOR FOR
select distinct 考勤号码 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month
OPEN cur_wkno_input
FETCH cur_wkno_input INTO @wk_no
WHILE @@FETCH_STATUS = 0
BEGIN
-----按工号循环
DECLARE cur_wk_date_input CURSOR FOR
select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
OPEN cur_wk_date_input
FETCH cur_wk_date_input INTO @wk_date
WHILE @@FETCH_STATUS = 0
BEGIN
--select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ‘ 09:00:00‘,101);
--select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ‘ 09:00:00‘,101);
-----按日期循环
set @row_count = 0
SELECT @row_count = count(*) from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 18:00:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 23:50:00‘,101) and 部门
not in (‘研发部‘,‘软件部‘,‘人力资源‘,‘财务中心‘,‘采购中心‘,‘市场部‘,‘工程部‘,‘总公司‘,‘总经办‘,‘销售公司‘)
if @row_count > 0
BEGIN
set @wkdatetime1 = (select top 1 日期时间 from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 18:00:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 23:50:00‘,101)
and 部门
not in (‘研发部‘,‘软件部‘,‘人力资源‘,‘财务中心‘,‘采购中心‘,‘市场部‘,‘工程部‘,‘总公司‘,‘总经办‘,‘销售公司‘) order by 日期时间)
update [Hr_1] set 上班打卡_E = @wkdatetime1 where 考勤号码 = @wk_no and 日期时间 = @wk_date and 上班打卡_E is null
end
-----按日期循环
FETCH cur_wk_date_input INTO @wk_date
end
CLOSE cur_wk_date_input
DEALLOCATE cur_wk_date_input
-----按工号循环
FETCH cur_wkno_input INTO @wk_no
end
CLOSE cur_wkno_input
DEALLOCATE cur_wkno_input
END
-----------------------
---晚上下班打卡
ALTER PROCEDURE [dbo].[hr_Update6]
AS
DECLARE @wkdatetime1 datetime --时间
DECLARE @wk_no varchar(20) --工号
DECLARE @wk_date datetime --打卡日期
DECLARE @wk_month varchar(20) --打卡月份
DECLARE @row_count int --记录行数
BEGIN
set @wk_month =‘2015-01‘ ---设置计算初值
DECLARE cur_wkno_input CURSOR FOR
select distinct 考勤号码 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month
OPEN cur_wkno_input
FETCH cur_wkno_input INTO @wk_no
WHILE @@FETCH_STATUS = 0
BEGIN
-----按工号循环
DECLARE cur_wk_date_input CURSOR FOR
select 日期时间 from Hr_1 where CONVERT(char(7),日期时间,120) =@wk_month and 考勤号码 = @wk_no
OPEN cur_wk_date_input
FETCH cur_wk_date_input INTO @wk_date
WHILE @@FETCH_STATUS = 0
BEGIN
--select CONVERT(datetime,CONVERT(char(10),@wk_date,120) + ‘ 09:00:00‘,101);
--select CONVERT(datetime,CONVERT(char(10),GETDATE(),120) + ‘ 09:00:00‘,101);
-----按日期循环
set @row_count = 0
SELECT @row_count = count(*) from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 18:00:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 23:50:00‘,101) and 部门
not in (‘研发部‘,‘软件部‘,‘人力资源‘,‘财务中心‘,‘采购中心‘,‘市场部‘,‘工程部‘,‘总公司‘,‘总经办‘,‘销售公司‘)
if @row_count > 0
BEGIN
set @wkdatetime1 = (select top 1 日期时间 from Hr where 考勤号码 = @wk_no and CONVERT(char(10),日期时间,120) = CONVERT(char(10),@wk_date,120) and
日期时间 > CONVERT(datetime,@wk_date + ‘ 18:00:00‘,101) and 日期时间 < CONVERT(datetime,@wk_date + ‘ 23:50:00‘,101)
and 部门
not in (‘研发部‘,‘软件部‘,‘人力资源‘,‘财务中心‘,‘采购中心‘,‘市场部‘,‘工程部‘,‘总公司‘,‘总经办‘,‘销售公司‘)
order by 日期时间 desc)
update [Hr_1] set 下班打卡_E = @wkdatetime1 where 考勤号码 = @wk_no and 日期时间 = @wk_date and 下班打卡_E is null
end
-----按日期循环
FETCH cur_wk_date_input INTO @wk_date
end
CLOSE cur_wk_date_input
DEALLOCATE cur_wk_date_input
-----按工号循环
FETCH cur_wkno_input INTO @wk_no
end
CLOSE cur_wkno_input
DEALLOCATE cur_wkno_input
END
标签:
原文地址:http://www.cnblogs.com/szlixin/p/4313269.html