我正在使用带有名为dbo.ClientRecords的表的SQL Server 2014。在此表中,我将DateOfBirth字段设置为DATETIME,将Age字段设置为Nvarchar(40)。我知道这需要改为int,我会这样做。
我有以下查询基本上根据DateOfBirth字段和当前日期进行计算,以计算出人的年龄。这符合我的要求。
SELECT id, DateOfBirth,
GETDATE() As [Today],
DATEDIFF (YY,DateOfBirth,GETDATE()) -
CASE
WHEN DATEADD(YY,DATEDIFF(YY,DateOfBirth,GETDATE()),DateOfBirth)
> GETDATE() THEN 1
ELSE 0
END AS [Age]
FROM dbo.ClientRecords
我正在关注以下网站创建更新触发器,因为我需要在提交Web表单的insert语句后更新age字段。
这是我尝试创建的触发器,但我似乎无法让这个工作。
CREATE TRIGGER [dbo].[Age_INSERT]
ON [dbo].[ClientRecords]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @id DATETIME
DECLARE @Age Varchar(40)
SELECT id,DateOfBirth,
GETDATE() As [Today],
DATEDIFF (YY,DateOfBirth,GETDATE()) -
CASE
WHEN DATEADD(YY,DATEDIFF(YY,DateOfBirth,GETDATE()),DateOfBirth)
> GETDATE() THEN 1
ELSE 0
END AS [Age]
FROM dbo.ClientRecords
INSERT INTO ClientRecords
VALUES(@id, @Age)
END
我收到的错误消息如下。
Msg 213, Level 16, State 1, Procedure Age_INSERT, Line 21
Column name or number of supplied values does not match table definition.
我失败了,因为我不确定我需要将其设置为变量。我以为我需要ClientRecords表和Age字段中的id。