更新触发器查询

时间:2017-01-13 16:12:04

标签: sql sql-server tsql sql-server-2014

我正在使用带有名为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字段。

Tutorial about Triggers

这是我尝试创建的触发器,但我似乎无法让这个工作。

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。

0 个答案:

没有答案