我有一个表tblClient
,它将客户的出生日期存储在日期时间DOB
类型的字段中。
这里的目标是,当客户端达到65岁(需要通过DOB计算)时,我需要在另一个表中插入一条新记录。
但是由于客户端的年龄因数据库事务(INSERT,UPDATE,DELETE)而没有改变,因此触发器是不可能的。
监控这些变化有什么好主意?
答案 0 :(得分:2)
创建一个每天或每小时运行的sql代理作业,使用T-SQL进行此计算,然后如果某人达到65,则会执行插入
答案 1 :(得分:2)
尽可能将其保留为SQL Server自包含 - 定期执行存储过程的SQL Server代理作业应该很好。
答案 2 :(得分:1)
计划任务或SQL Server维护计划,根据需要经常运行存储过程,更新所需的行。
答案 3 :(得分:1)
使用带有存储过程的SSIS的夜间作业怎么样?如果它发生了65,它会进入表中的新行?
答案 4 :(得分:1)
您可以使用SQL Server Management Studio在数据库中创建SQL Server代理作业:
http://www.databasedesign-resource.com/sql-server-jobs.html
将日常工作设置为EXEC BirthdayProcessingProcedure
或任何您想要命名的工作。
只要数据库启动并运行,JOB就会根据您设置的计划(在数据库中)运行。
答案 5 :(得分:1)
我将提出另一种方法 - 每次更新(或添加)DOB时运行一些计算从现在到第一个人达到65的时间段。然后(重新)安排一个工作在那时运行
另外,我不敢相信你需要在他们达到65岁时插入那一行,所以计算今天新的65岁儿童的每日一次的程序看起来还不够好吗?
答案 6 :(得分:1)
年龄65日期的新字段怎么样?在记录插入时计算一次,然后您可以在此字段中查询您的心脏内容。你需要这样做是一个触发器(和更新的帐户,它们很少用于DOB字段,但可能在错误输入时。)现在我考虑一下,一个计算的字段可能会工作而不是触发器。
然后运行每日工作以捕获自上次成功运行作业以来年满65岁的任何人。确保处理这个问题,以便如果作业有一天失败,那么该数据的人员将在下一次运行时被选中。
我之所以建议这样做,那就是每天计算你数据库中每个人的年龄对于一个真正只需要进行一次的计算就是浪费资源。当你有100个人时,没什么大不了的,当你有一百万人时,这个问题很大。 Doindthis对一百万条记录进行计算以确定你需要的三个是痛苦的。在数据输入上做一次,不是那么糟糕。