存储过程不更新 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
(即使 age
是 NULL
)。 WHERE
子句过滤掉 NULL
结果。该部分可以使用以下方法修复:
UPDATE Person
SET Age = DATEDIFF(year, GETDATE(), BirthDate)
WHERE Age IS Null;
接下来您会发现所有年龄都是负数,但那是您包含的代码。假设 BirthDate
s 是过去的,您希望参数的顺序相反。
您的 CREATE TABLE
也不起作用,因为 PRIMARY KEY
约束不正确。但是,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
(即使 age
是 NULL
)。 WHERE
子句过滤掉 NULL
结果。该部分可以使用以下方法修复:
UPDATE Person
SET Age = DATEDIFF(year, GETDATE(), BirthDate)
WHERE Age IS Null;
接下来您会发现所有年龄都是负数,但那是您包含的代码。假设 BirthDate
s 是过去的,您希望参数的顺序相反。
您的 CREATE TABLE
也不起作用,因为 PRIMARY KEY
约束不正确。但是,table 似乎存在,所以我认为这是写问题时的转录错误。