按某一段時間,自動生成員工的打卡記錄

2021-09-05 16:15:55 字數 3424 閱讀 9461

好久沒上bbs.54master了。有一朋友問了一條有關通過sql語句自動生成打卡問題。

原問題:姓名  第一次打卡時間   第二次打卡時間  日期

a          8:01                        17:01                    07-01-01

b          8:04                        17:02                    07-01-01

a          8:03                        17:07                    07-01-02

.............

我要做乙份假的考勤記錄,需批量更新考勤打卡時間, 如果我需要更改07年1月份的所有人員第一,

二次打卡時間,且產生虛似隨機的乙個打卡時間,第一次打卡時間範圍為8:00~8:10 第二次時間範圍為17:00~17:10之間

/**/

--人事表

create

table

#employee(employeeid 

int,chinesename 

nvarchar(20

))--

考勤表create

table

#onoffduty(employeeid 

int,check1 

datetime

,check2 

datetime

,checkdate 

datetime)--

虛擬人事資訊

insert

into

#employee

select1,

'張小名

'union

allselect2,

'黃大'union

allselect3,

'李兵'union

allselect4,

'劉達'union

allselect5,

'張雷'union

allselect6,

'郭小妹'/*

自動生成2023年1月份的考勤打卡時間

方法:使用游標按員工再按日期生成打卡記錄   

*/declare

@begindate

datetime

,@enddate

datetime

,@checkdate

datetime

,@employeeid

int,

@execute_sql

nvarchar

(4000),

@for

intselect

@begindate='

2007-01-01',

@enddate='

2007-01-31',

@execute_sql=''

,@for=0

declare

cursoremployee 

cursor

forselect

employeeid 

from

#employee 

open

cursoremployee

fetch

next

from

cursoremployee 

into

@employeeid

while

@@fetch_status=0

begin

set@checkdate

=@begindate

while

(@checkdate

<=

@enddate

)begin

--根據實際調整rand()的值範圍

select

@execute_sql

=@execute_sql+'

insert into #onoffduty select '+

cast

(@employeeid

asnvarchar(20

))+',

'''+

convert

(nchar(10

),@checkdate

,121)+

'08:0'+

substring

(cast

(rand

() as

nvarchar(20

)),3,1

)+''',

'''+

convert

(nchar(10

),@checkdate

,121)+

'17:0'+

substring

(cast

(rand

() as

nvarchar(20

)),3,1

)+''',

'''+

convert

(nchar(10

),@checkdate

,121)+

''''

+char(10

),@for

=@for+1

if(@for%40

)=0--

每40行儲存一次,根據實際的@execute_sql長度來除錯多少行。

begin

execute

(@execute_sql

)set

@execute_sql=''

endset

@checkdate

=dateadd

(day,1

,@checkdate

)end

fetch

next

from

cursoremployee 

into

@employeeid

endclose

cursoremployee

deallocate

cursoremployeeif(

@execute_sql

<>

'') 

execute

(@execute_sql

)  --

判斷@execute_sql是否已經執行完成

--查詢結果:

select

b.chinesename,a.check1,a.check2,a.checkdate 

from

#onoffduty a 

inner

join

#employee b 

onb.employeeid

=a.employeeid

order

bya.employeeid,a.checkdate

drop

table

#employee,#onoffduty

按某一段時間,自動生成員工的打卡記錄

好久沒上bbs.54master了。有一朋友問了一條有關通過sql語句自動生成打卡問題。原問題 姓名 第一次打卡時間 第二次打卡時間 日期 a 8 01 17 01 07 01 01 b 8 04 17 02 07 01 01 a 8 03 17 07 07 01 02 我要做乙份假的考勤記錄,需批...

一段時間的總結

沒有記錄的習慣,可能是因為文筆不好,不會表達,不善於用文字表達出心中的想法,也許是因為忙碌,一直想著向前走,沒有停下來看看的心態,更可能是因為懶吧。大學過了四分之三了,記得應該是就大一的時候寫過一次總結,以後就是一直就這麼過了,經歷就是經歷了,也有記錄的想法但是沒有行動。大學雖然是資訊管理專業但是幾...

最近一段時間的規劃

看完了士兵突擊,有感動,也有對自己的不滿.許三多為什麼能夠成功,那麼多的人都去關心他,愛護他.561,還有幾個班長,連長等都是好人,就沒發現誰對他使壞呢 也許是電視太過於理想了.我一直在懷疑現實中還有這種人的嗎?自己現在覺的好懶惰,早上基本都睡到吃飯的時候才起來,衣服啊什麼都懶的去洗,什麼事情都堅持...