我试图保留对表中数据更改的记录。我读过有很多种方法可以做到这一点,听起来更方便,但在我的情况下,我想用触发器来实现这个功能。我有两个表:SQL触发字段更新以在另一个表中插入新记录
CREATE TABLE Applications
(
Application_ID INT NOT NULL,
Student_ID INT NOT NULL,
Job_ID INT NOT NULL,
ApplicationChange_TYPE VARCHAR(64) NOT NULL,
PRIMARY KEY (Application_ID),
FOREIGN KEY (Student_ID) REFERENCES Students(Student_ID),
FOREIGN KEY (Job_ID) REFERENCES Jobs(Job_ID),
CONSTRAINT CK_TYPE CHECK (ApplicationChange_TYPE in ('Submitted', 'Withdrawn', 'Invited For Interview', 'Invited to Assessment Centre', 'Rejected', 'Accepted'))
);
和:
CREATE TABLE ApplicationChanges
(
ApplicationChange_ID INT NOT NULL,
Application_ID INT NOT NULL,
ApplicationChange_TYPE VARCHAR(64),
ApplicationChange_DATETIME DATE NOT NULL,
PRIMARY KEY (ApplicationChange_ID),
FOREIGN KEY (Application_ID) REFERENCES Applications(Application_ID),
CONSTRAINT CK_APPTYPE CHECK (ApplicationChange_TYPE in ('Submitted', 'Withdrawn', 'Invited For Interview', 'Invited to Assessment Centre', 'Rejected', 'Accepted'))
);
我想创建一个触发器,这样,当在应用程序表中的记录的ApplicationChange_TYPE字段编辑/更新,新纪录是在ApplicationChanges表中创建。我需要它将Application_ID和ApplicationChange_TYPE从应用程序表中已编辑的记录中继承到ApplicationChanges中的新记录中。 ApplicationChange_DATETIME字段应填入当前日期。
在当前,两个表的主键都使用序列和触发器来自动创建新记录的ID号。
任何输入将不胜感激!如果我一直不清楚,请致歉。
编辑:
此外,我已经作出了这个尝试,但我是那么不确定的,它看起来那么坏,我不认为有在包括它的任何一点。但在这里,它是:
CREATE OR REPLACE TRIGGER ApplicationsUpdateTrigger
AFTER UPDATE ON Applications
BEGIN
INSERT ApplicationChanges (Application_ID, ApplicationStatus_TYPE, ApplicationChange_TYPE)
SELECT Application_ID, ApplicationStatus_TYPE FROM Applications
JOIN inserted ON inserted.Application_ID = Applications.Application_ID
INSERT INTO ApplicationChanges (Application_ID, ApplicationStatus_TYPE, ApplicationChange_DATETIME)
VALUES (NULL, Application_ID, ApplicationStatus_TYPE, GETDATE())
END;
/
我删除了不兼容的数据库标记。请标记您真正使用的数据库。 –
为什么“序列和触发器”而不是“序列和列默认值”? –
问题中没有提到提问者使用SQL Server/TSQL,因此我回滚了这些标签。 –