Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中监视计算数据(一个人的年龄)_Sql Server_Sql Server 2005_Tsql_Calculated Columns - Fatal编程技术网

Sql server 在SQL Server中监视计算数据(一个人的年龄)

Sql server 在SQL Server中监视计算数据(一个人的年龄),sql-server,sql-server-2005,tsql,calculated-columns,Sql Server,Sql Server 2005,Tsql,Calculated Columns,我有一个表,tblClient,它将客户的出生日期存储在datetime类型的字段中,DOB 这里的目标是,当客户年满65岁时(需要通过DOB计算),我需要在另一个表中插入一条新记录 但由于客户机的年龄不会因数据库事务(插入、更新、删除)而改变,所以触发器是不可能的 监视此类更改的好主意是什么?创建一个sql代理作业,每天或每小时运行一次,该作业将使用T-sql进行此计算,然后,如果某人年满65岁,它将插入一个计划任务或sql Server维护计划,该计划可根据需要经常运行存储过程,更新所需的行

我有一个表,
tblClient
,它将客户的出生日期存储在datetime类型的字段中,
DOB

这里的目标是,当客户年满65岁时(需要通过DOB计算),我需要在另一个表中插入一条新记录

但由于客户机的年龄不会因数据库事务(插入、更新、删除)而改变,所以触发器是不可能的


监视此类更改的好主意是什么?

创建一个sql代理作业,每天或每小时运行一次,该作业将使用T-sql进行此计算,然后,如果某人年满65岁,它将插入一个计划任务或sql Server维护计划,该计划可根据需要经常运行存储过程,更新所需的行。

如果夜间作业使用SSI和一个存储过程来检查它们是否为65,那么它会在表中输入一个新行呢?

使其尽可能独立于SQL Server-定期执行存储过程的SQL Server代理作业应该可以很好地执行。

您可以创建SQL Server数据库中的服务器代理作业使用SQL Server Management Studio执行此操作:

将每日作业设置为执行BirthdayProcessingProcedure或您想命名的任何内容


只要数据库启动并运行,作业将根据您设置的时间表(从数据库中)运行。

我将提出另一种方法-每次更新(或添加)DOB时运行一些东西,计算从现在起到第一个人达到65岁的时间段。然后(重新)安排作业在该时间运行


而且,我不相信你需要在他们65岁时插入那一行,所以一个每天一次的程序来计算今天65岁的新人似乎就足够了?

一个新的字段是65岁的日期如何。在记录插入时计算一次,然后您可以查询此字段中的内容。你需要这样做,这是一个触发器(和帐户的更新,他们是罕见的为DOB字段,但可能当他们是错误的键入。)现在,我想一些,一个计算字段可能会工作,而不是一个触发器

然后,每天运行一次作业,抓住自上次作业成功运行以来年满65岁的任何人。一定要处理好这件事,这样,如果某一天工作失败,那么该日期的人员将在下一次运行时被接走


我提出这一建议的原因是,每天计算数据库中每个人的年龄对于真正只需要做一次的计算来说是一种浪费资源的行为。好吧,当你有100人时,这不是什么大问题,当你有100万人时,这是个大问题。在一百万条记录上做这种计算来确定你需要的三条记录是痛苦的。在数据输入时执行一次,还不错。

一个定期计划的作业(例如存储过程),它执行检查并采取适当的操作。@mjv:Mitch的评论就在我发布我的之前出现。让我把它扔掉。当你可以从SQL代理作业中使用T-SQL时,为什么要使用SSIS?@sqlmeane-使用哪种调度服务有区别吗?如果你现在使用SSIS,你还需要部署包,而且我们都知道他甚至没有使用SSIS每天运行听起来很合理,现在我想。。。谢谢Paul,我不知道从今天算起65年前的某个日期,每天/晚上计算一次,然后查询任何与该日期相等的DOB,或者您的建议:age65date=getdate()?索引DOB就更好了。不同之处在于在插入时执行一次计算和每天执行一次计算(当人们将年满65岁的日期通常不是一个变化的数字时),尤其是在大型数据集上。在不必要的情况下重复这样的计算是没有效率的。为什么要浪费服务器资源每天重复做同样的工作?