【发布时间】:2017-06-01 13:55:00
【问题描述】:
我想将数据从表 T1 复制到表 T2,条件如下: 1)数据不应重复。 2)T1-Checkin和T2-checkin列的时间差必须大于5秒。
我现有的程序这个
ALTER PROCEDURE [dbo].[usp_InsertUserAttendanceLog] @userId varchar(400),@CheckInCheckOutDate datetime,@WorkDate datetime,@InOutMode int,@VerifyMode int, @InsertDate datetime
AS
BEGIN
if
not exists (select 1 from tblAttendance where CheckInCheckOutDate=@CheckInCheckOutDate and WorkDate=@WorkDate and InOutMode=@InOutMode and VerifyMode=@VerifyMode )
begin
if
not exists (select 1 from tblAttendance where empCode=@userId and convert(date,CheckInCheckOutDate)=convert(date,@CheckInCheckOutDate) and DATEDIFF(second,CheckInCheckOutDate,@CheckInCheckOutDate) <= 3)
begin
INSERT INTO tblAttendance(EmpCode,CheckInCheckOutDate,WorkDate,InoutMode,VerifyMode,InsertDate)
VALUES(@userId,@CheckInCheckOutDate,@WorkDate,@InOutMode,@VerifyMode,@InsertDate)
end
end
end
我尝试了这样的代码,但不起作用。得到重复
INSERT INTO tblAttendance (EmpCode,CheckInCheckOutDate,WorkDate,InOutMode,VerifyMode,InsertDate,[Status])
SELECT T1.EmpCode,T1.CheckInCheckOutDate,T1.WorkDate,T1.InOutMode,T1.VerifyMode,T1.InsertDate,T1.[Status]
FROM testAttendanceBulk T1
WHERE NOT EXISTS(select 1 from tblAttendance T2 where T2.CheckInCheckOutDate=T1.CheckInCheckOutDate
and T2.WorkDate=T1.WorkDate and T2.InOutMode=T1.InOutMode
and T2.VerifyMode=T1.VerifyMode and T2.empCode=T1.EmpCode
and convert(date,T2.CheckInCheckOutDate)=convert(date,T1.CheckInCheckOutDate)
and DATEDIFF(second,T2.CheckInCheckOutDate,T1.CheckInCheckOutDate) <= 5)
【问题讨论】:
-
你能定义“不工作”吗?你得到重复?你什么都得不到吗?您收到错误消息了吗?
-
@Sean Lange 重复感谢
-
不要害怕在查询中添加一些空格,这样它们更易于阅读。文本 sql 的墙很难使用。您的哪个查询返回重复项?两个都?第一个?第二个?请记住,我们看不到您的屏幕或读懂您的想法。我们可以提供帮助,但您必须向我们提供信息。这是一个很好的起点。 spaghettidba.com/2015/04/24/…
-
@ Sean Lange 第一个程序运行良好,但它正在逐个输入,现在我希望它像第二个代码一样执行,其中它从一个表复制到另一个表命令谢谢。
标签: sql sql-server sql-server-2008 sql-server-2012 sql-server-2008-r2