以前,我为插入,更新和删除操作分别创建了3个触发器。
当其中一个发生时,触发器应该修改另一个表中的值。
当我尝试为所有3个动作(插入,更新和删除)创建一个组合触发器时,我在尝试执行它时会遇到很多错误。我已经尝试了case语句和if语句,但不知道出了什么问题。
CREATE TRIGGER multipurposeCourseEnrollment
ON courseEnrollment AFTER INSERT, DELETE, UPDATE AS
BEGIN
IF EXISTS(SELECT courseID FROM DELETED) AND EXISTS(SELECT courseID FROM INSERTED)
THEN
DECLARE @oldCourseID INT
DECLARE @newCourseID INT
SELECT @oldCourseID = (SELECT courseID FROM DELETED)
SELECT @newCourseID = (SELECT courseID FROM INSERTED)
BEGIN
UPDATE courses SET courseOpenSeats = (courseOpenSeats +1)
WHERE courseID = @oldCourseID
UPDATE courses SET courseOpenSeats = (courseOpenSeats -1)
WHERE courseID = @newCourseID AND courseOpenSeats>0
END
ELSE
IF EXISTS(SELECT courseID FROM DELETED)
THEN
DECLARE @courseIDDel INT
SELECT @courseIDDel = (SELECT courseID FROM DELETED)
BEGIN
UPDATE courses SET courseOpenSeats = (courseOpenSeats +1)
WHERE courseID = @courseIDDel
END
ELSE
IF EXISTS(SELECT courseID FROM UPDATED)
THEN
DECLARE @courseID INT
SELECT @courseID = (SELECT courseID FROM UPDATED)
BEGIN
UPDATE courses SET courseOpenSeats = (courseOpenSeats - 1)
WHERE courseID = @courseID AND courseOpenSeats>0
END
ELSE
END)
END;
一个问题可能是我如何宣布@variables
。不确定这是否正确。
我得到的错误是:
关键字'THEN'附近的语法不正确。
我也是ELSE
答案 0 :(得分:0)
触发器的一些问题如下:
没有任何更新的表,已使用第一个条件检查的更新案例。 即(删除和插入)的情况。
第二个就是之后
IF EXISTS(---condition---)
您必须使用 BEGIN
和END
而不是THEN
和END
。
这也是您在该查询中可能多次遇到的语法错误。
希望这有助于你。