Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 更新触发器查询_Sql_Sql Server_Tsql_Sql Server 2014 - Fatal编程技术网

Sql 更新触发器查询

Sql 更新触发器查询,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我正在使用SQL Server 2014和一个名为dbo.ClientRecords的表。在这个表中,我有一个DateOfBirth字段设置为DATETIME,一个Age字段设置为Nvarchar(40)。我知道这需要更改为int,我会这样做 我有下面的查询,它基本上基于DateOfBirth字段和当前日期进行计算,以计算出此人的年龄。这是我所要求的 SELECT id, DateOfBirth, GETDATE() As [Today], DATEDIFF (YY,DateO

我正在使用SQL Server 2014和一个名为dbo.ClientRecords的表。在这个表中,我有一个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语句后更新年龄字段

这是我的触发器,我试图创造,但我只是不能让它工作

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表和年龄字段中的id。

能否共享ClientRecords架构,为什么需要触发器..约束不起作用..如果您试图只计算年龄,您是否真的想在插入后创建执行
更新的
触发器?同意@mustaccio。插入后需要
触发器。此外,您应该从插入的
表中选择以计算年龄。然后更新记录。你可能想考虑一个计算的列,而不是一个触发的年龄。为什么麻烦存储在你的桌子上的人的年龄。一旦存储数据,数据就过时了。您必须每天对整个表运行更新,以确保数据是最新的。当你需要的时候,我会快速计算年龄。在你的触发器中,我想你要做的是更新,而不是插入。触发器在每条语句中触发一次,而不是每行,所以如果
更新
影响42行,你的触发器需要处理这个问题。(因此插入了
删除了
表。)并且,如前所述,您需要在
GETDATE
上触发,因为您正在追逐一个移动的目标。