SQL2000数据库问题,现在有两张表,一张员工表和一张每日签到表,能不能建立一个触发器

SQL2000数据库问题,现在有两张表,一张员工表和一张每日签到表,能不能建立一个触发器,第1张

这个需要建一个存储过程和一个数据库作业和一个返回随机时间段的函数才能实现

如果有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

就可以了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9707967.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存