我的列有以下表格(仅列出相关列):
编辑:我忘了提到CoreHourID不是一个独特的字段,表格看起来像这样:条目
EntryID(int / auto-inc)
EmployeeNumber(int)
JustifyDate(datetime)
EntryDate(日期时间)员工
EmployeeNumber(int)
CoreHourID(int)
WorkingFromHome(bit / bool)小时
EntryID(int)
InHour(日期时间)
OutHour(日期时间)CoreHour
CoreHourID(int) - 不是唯一的 InHour(int)
OutHour(int)
+-----------+-------+-------+----------+
|CoreHourId |InHour |OutHour|Identifier|
+-----------+-------+-------+----------+
| 2 | 9 | 12 | 1 |
| 2 | 14 | 17 | 2 |
| 3 | 7 | 11 | 3 |
| 3 | 15 | 18 | 4 |
+-----------+-------+-------+----------+
抱歉大布局,我真的不知道如何正确发布表信息。 现在,这是尝试解释我正在尝试做的事情:
每天都应在Entry
和Hour
中为所有WorkingFromHome
的员工插入一行。在Entry
表中,它应该放置相应的EmployeeNumber
,对于JustifyDate
,它应该添加作业运行时的任何一天。对于EntryDate
字段,它应该添加当天的日期,但时间部分应该是第一个对应的InHour
行中的CoreHour
。
对于Hour
表,它应该添加刚插入EntryID
表中的Entry
,InHour
应该与EntryDate
相同}对于OutHour
字段,它应根据与员工OutHour
对应的最后CoreHourID
添加日期时间。
我很挣扎,所以感谢任何帮助。
PS:欢迎任何有关我的解释的意见/问题,我很乐意回复。
答案 0 :(得分:2)
以下内容可以封装到可以通过预定作业执行的存储过程中。我不确定for JustifyDate it should add whatever day it is when the job is running
你的意思。
Declare @NewEntries Table (
EntryId int not null
, EmployeeNumber int not null
, JustifyDate datetime
, EntryDate datetime
)
Insert [Entry]( EmployeeNumber, JustifyDate, EntryDate )
Output Inserted.EntryId, Inserted.EmployeeNumber, Inserted.JustifyDate, Inserted.EntryDate
Into @NewEntries
Select EmployeeNumber
, CURRENT_TIMESTAMP
, DateAdd(hh, CoreHour.InHour, DateAdd(d, 0, CURRENT_TIMESTAMP))
From Employee
Join CoreHour
On CoreHour.CoreHourId = Employee.CoreHourId
Where WorkingFromHome = 1
Insert [Hour]( EntryId, InHour, OutHour )
Select NE.EntryId, DatePart(hh, NE.EntryDate), CoreHour.OutHour
From @NewEntries As NE
Join Employee
On Employee.EmployeeNumber = NE.EmployeeNumber
Join CoreHour
On CoreHour.CoreHourId = Employee.CoreHourId
(修改为使用输出子句)。