2010-03-03 87 views
0

我有一个表,tblClient,其中存储出生客户的日期型日期时间,DOB的现场监测计算的数据(一个人的年龄)。在SQL Server

目标这里是,当一个客户端达到65岁(需要计算通过DOB),我需要插入一个新的记录到另一个表。

但是由于数据库事务(INSERT,UPDATE,DELETE)的原因,客户端的时间不会改变,所以触发器是没有问题的。

什么是一个好主意,montior这样的变化?

+0

执行检查并采取适当操作的周期性预定作业(例如存储过程)。 – 2010-03-03 14:47:44

+0

@mjv:Mitch的评论显示在我发布我的之前。让我摆脱它。 – Sung 2010-03-03 14:57:11

回答

2

创建每天或每小时运行的SQL代理工作,会做这个计算与T-SQL,然后如果有人达到65它会做插入

1

运行一个存储计划的任务或SQL Server维护计划程序,并根据需要更新所需的行。

1

怎么样使用SSIS与检查,如果它发生在一个存储过程在夜间作业,他们是65进入一个新的行中的表?

+2

为什么SSIS可以使用SQL代理作业中的T-SQL? – SQLMenace 2010-03-03 14:49:15

+0

@SQLMenace - 调度服务有什么不同? – DVK 2010-03-03 14:51:24

+0

如果你现在使用SSIS你也需要部署这个包并且对于我们所知道的他甚至不使用SSIS – SQLMenace 2010-03-03 14:58:46

2

尽可能保持SQL Server的独立性 - 定期执行存储过程的SQL Server代理作业应该很好地完成。

1

您可以使用SQL Server Management Studio中为这个数据库中创建一个SQL Server代理作业:

http://www.databasedesign-resource.com/sql-server-jobs.html

建立一个日常工作,无论你需要将其命名或。

只要数据库启动并运行,JOB就会根据您设置的计划(从数据库中)运行。

1

我会提出另一种方法 - 每次DOB被更新(或增加)的时间,从现在开始计算周期运行的东西,直到第一人达到65。然后(重新)安排一个作业在运行时间。

而且,我不能相信你需要插入该行到达65秒,所以,计算今天的新65年年轻人似乎不够好一次的一天程序?

+0

现在每天运行的声音足够合理我现在想起它...感谢Paul, – Sung 2010-03-03 14:56:38

1

65岁的新领域怎么样?在记录插入时计算一次,然后你可以查询你的心在这个领域的内容。你需要这样做是一个触发器(并且考虑到了更新,它们对于DOB字段是罕见的,但是当它们错误输入时可能)。现在我想到了一些,一个计算出来的文件可能会起作用而不是触发器。

然后运行一项日常工作,以抓住自上次作业成功运行后转为65的任何人。请务必处理这个问题,以便如果某一天工作失败,那么来自该daty的人将会在下一次运行中被选中。

之所以我认为这是每天计算每个人的年龄inyour数据库是这样的一个计算,真正只需要进行一次资源的浪费。当你有100人时没什么大不了的,当你有一百万人时是个大问题。为了确定你需要的三个是痛苦的,这样做可能会对一百万条记录产生影响。在数据输入时做一次,并不是那么糟糕。

+0

不确定我看到计算一个日期为65年前的日期,每天晚上一次,然后查询任何等于该日期的DOB或您的建议:age65date = getdate()?索引DOB效果更好。 – JeffO 2010-03-03 18:54:40

+0

不同之处在于插入时执行一次计算并且每天执行一次计算(当人将要转向65的日期通常不是一个变化的数字),尤其是在大型数据集上。当他们不必要时重复进行这种计算是无效的。为什么浪费服务器资源每天都在做同样的工作? – HLGEM 2010-03-03 19:35:10