如何使用触发器和 if 条件将值插入 SQL 表?

Posted

技术标签:

【中文标题】如何使用触发器和 if 条件将值插入 SQL 表?【英文标题】:How to insert values into an SQL table using triggers and if conditions? 【发布时间】:2021-07-20 22:57:35 【问题描述】:

基本上,我正在尝试创建一个“退休”SQL 表,该表将从现有的“员工”SQL 表中获取其值。

如果员工的服务年限超过 5 年,则他/她将被添加到退休表中。

我正在分享我尝试过的代码。

CREATE TABLE Retired(
   StaffID INT
);

DELIMITER #
CREATE TRIGGER RetiredTrigger after insert on Staff 
FOR EACH ROW 
BEGIN
INSERT INTO ALUMNI(StaffID) VALUES(new.StaffID);
IF Staff.YearsOfService > 5
END #

理想情况下,结果应该是一张表(即退休表),其中的 StaffID 应仅包含 YearsOfService 大于 5 的教师。

我希望我能够清楚地表达我的疑问。

提前致谢。

【问题讨论】:

YearsOfService 何时/如何更新?存储员工的开始日期会比包含 YearsOfService 的字段更好...... 【参考方案1】:
CREATE TABLE Retired(
   StaffID INT
);

DELIMITER #
CREATE TRIGGER RetiredTrigger after insert on Staff 
FOR EACH ROW 
BEGIN
IF (NEW.YearsOfService > 5) THEN
INSERT INTO Retired(StaffID) VALUES(new.StaffID);
END IF;
END #
DELIMITER ;

【讨论】:

虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值. 原始代码中的错误:表已退休,但值已插入另一个名为 ALUMNI 的表中。 IF 语句没有 END IF。此外,新变量不用于比较 YearsOfService。 您可以将其添加到答案本身)

以上是关于如何使用触发器和 if 条件将值插入 SQL 表?的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过查询将值传递给 SQL 触发器吗?

带条件的 SQL 插入查询

sql插入的操作

使用触发器将值插入另一个表,除非值存在,在这种情况下更新

SQL 创建触发器以在特定条件下更新表

使用 PL/SQL 将值插入全局临时表