如果有A表(员工),sUserCode,B表(签到表),sUserCode,dtSignInDate
-- 返回随机时间段的函数
Create Function RandDateTime(@RandNum Decimal(38,18),@StartTime DateTime,@EndTime DateTime)
Returns DateTime
As
Begin
Declare @HourDiff Decimal(38,18)--两个时间之间的小时差值
Declare @MinutePartDiff Decimal(38,18)--分钟部分的差值
Declare @SecondPartDiff Decimal(38,18)--秒部分的差值
Declare @MsPartDiff Decimal(38,18)--毫秒部分的差值
Declare @SmallDate DateTime
Declare @BigDate DateTime
Declare @ReturnDateTime DateTime
/*取各部分差值*/
Set @MsPartDiff = Abs(Convert(Decimal(38,18),DatePart(ms,@EndTime)-DatePart(ms,@StartTime)))
Set @SecondPartDiff = Abs(Convert(Decimal(38,18),DatePart(s,@EndTime)-DatePart(s,@StartTime)))
Set @MinutePartDiff = Abs(Convert(Decimal(38,18),DatePart(mi,@EndTime)-DatePart(mi,@StartTime)))
Set @HourDiff = DateDiff(hh,@StartTime,@EndTime)
Set @SmallDate = @StartTime
Set @BigDate = @EndTime
If @HourDiff <0
Begin
Set @SmallDate = @EndTime
Set @BigDate = @StartTime
Set @HourDiff = -@HourDiff
End
ActionLable:
Declare @HourDecimal Decimal(38,18)--小时的小数部分
Declare @HourString varchar(200)
Set @HourDiff = @HourDiff * @RandNum
Set @HourString = CONVERT(VARCHAR(200),@HourDiff)
Set @HourString = SubString(@HourString,CharIndex('.',@HourString)+1,Len(@HourString))
Set @HourString = '0.' + @HourString
Set @HourDecimal = Convert(Decimal(38,18),@HourString)
Set @MsPartDiff = (@MsPartDiff + @SecondPartDiff * 1000 + @MinutePartDiff*1000*60 + @HourDecimal * 3600*1000) * @RandNum
Set @ReturnDateTime = DateAdd(hh,@HourDiff,@SmallDate)
Set @ReturnDateTime = DateAdd(ms,@MsPartDiff,@ReturnDateTime)
Return @ReturnDateTime
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
-- 自动签到存储过程
Create procedure p_AutoSignIn
begin
-- @startdate 打卡开始时间
-- @enddate 打卡结束时间
declare @startDate datetime
declare @enddate datetime
set @startDate=getdate()
set @endDate=dateadd(n,[20],@startDate) 可以换成自己需要的时间差值
-- a表示0-1 之间的随机数值,可用小数
insert into B(sUserCode,dtSignInDate)
select sUserCode,RandDatetime (a,@startdate,@enddate) from A
end
-- 创建计划作业
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
update base set flag=0 where datediff(dd,date,getdate())=0
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排为一天一次
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
表一 user:userid,name, firstname表二 sign: userid, time
表三 notes: userid, note
表四 signtime: signid, firstTime, lastTime
就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)