如何每年更新数据库字段

时间:2011-03-24 04:58:48

标签: asp.net database sql-server-2008 auto-update

我有一个数据库,其中包含2个名为DateOfBirthAge的字段,分别用于存储用户DOB和年龄。根据DOB匹配服务器日期,我希望Age列每年自动递增1。

实现这一目标的最佳方法是什么?我正在使用 asp.net sql server 2008

1 个答案:

答案 0 :(得分:4)

不是同时存储DateOfBirthAge,而是在计算年龄的表格上创建computed column

[Age] AS datediff(year,  DateOfBirth, getdate()) 

所以在你的表创建中:

-- Create Table with computed column
CREATE TABLE [dbo].[CCtest]
(
    [id] [int] not NULL,
    [DateOfBirth] [datetime] NULL,
    -- etc...
    [Age] AS datediff(year,  DateOfBirth, getdate()) 
)
GO 

如果要保留计算值,请添加PERSISTED关键字。

一种可能性,如果您希望年龄以年和月显示:

    [AgeInDays] AS datediff(day,  DateOfBirth, getdate()) 

然后在您的表格上创建一个将AgeInDays格式化为数年和数月的视图。

这是另一种可能性,使用[AgeYears]的计算列:

create view vwCCtestAge
AS
select 
   id, 
   dateofbirth,
   cast([AgeYears] as varchar(4)) + ' years ' + 
      cast(datediff(month, DateOfBirth, getdate()) 
           - case when (AgeYears > 0) then (AgeYears - 1)*12 
                  else 0 
             end as varchar(4)) + ' months' as Age
   from cctest2
   GO

[你应该检查边界情况......]