как обновлять поле базы данных каждый год - PullRequest
2 голосов
/ 24 марта 2011

У меня есть база данных, которая содержит 2 поля с именами DateOfBirth и Age, для хранения пользователей DOB и age соответственно.Я хочу, чтобы столбец Age автоматически увеличивался на 1 каждый год в соответствии с датой сопоставления сервера DOB.

Что может быть лучшим способом для достижения этой цели?Я использую asp.net и sql server 2008 .

1 Ответ

4 голосов
/ 24 марта 2011

Вместо того, чтобы хранить DateOfBirth и Age, создайте вычисляемый столбец в таблице, которая вычисляет возраст:

[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

[Вы должны проверить граничные случаи ...]

...