存储过程不更新 table

Stored procedure does not update the table

我想要一个存储过程来根据生日计算年龄。

这是我的存储过程:

CREATE PROCEDURE CalculateAge
AS
    UPDATE Person
    SET Age = DATEDIFF(year, GETDATE(), BirthDate) 
    WHERE Age = Null;

这是我的table'Person'

CREATE TABLE [dbo].[Person]
(
    [Id] [int] NOT NULL,
    [BirthDate] [date] NOT NULL,
    [Email] [nvarchar](150) NOT NULL,
    [Lastname] [varchar](50) NOT NULL,
    [Firstname] [varchar](50) NOT NULL,
    [Age] [nchar](10) NULL,

    CONSTRAINT [PK_Person] 
        PRIMARY KEY CLUSTERED 
)

然而,当我执行程序时,table 和 'Person' 并没有改变。它不会用 Age...

填充列

可能是什么问题?

一个明显的问题是:

UPDATE Person
    SET Age = DATEDIFF(year, GETDATE(), BirthDate)
    WHERE Age = Null;
    ----------^

等式的计算结果总是 NULL(即使 ageNULL)。 WHERE 子句过滤掉 NULL 结果。该部分可以使用以下方法修复:

UPDATE Person
    SET Age = DATEDIFF(year, GETDATE(), BirthDate)
    WHERE Age IS Null;

接下来您会发现所有年龄都是负数,但那是您包含的代码。假设 BirthDates 是过去的,您希望参数的顺序相反。

您的 CREATE TABLE 也不起作用,因为 PRIMARY KEY 约束不正确。但是,table 似乎存在,所以我认为这是写问题时的转录错误。