Sql 更新触发器查询
我正在使用SQL Server 2014和一个名为dbo.ClientRecords的表。在这个表中,我有一个DateOfBirth字段设置为DATETIME,一个Age字段设置为Nvarchar(40)。我知道这需要更改为int,我会这样做 我有下面的查询,它基本上基于DateOfBirth字段和当前日期进行计算,以计算出此人的年龄。这是我所要求的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
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
上触发,因为您正在追逐一个移动的目标。