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