【发布时间】:2020-03-18 08:01:12
【问题描述】:
我有引用学生表的类表。 当插入 >=8 的英语科目分数时,我写了一个触发器到 +1 exellent_eng 的数量,但它有错误:
消息 4104,级别 16,状态 1,过程 tr_addExellentEnglishStudent,第 3 行 [批处理开始第 1 行] 无法绑定多部分标识符“x.exellent_Eng”。
我正在使用 SSMS。
CREATE TRIGGER tr_addExellentEnglishStudent ON dbo.dbo_student AFTER INSERT AS
BEGIN
UPDATE dbo.dbo_class
SET x.exellent_Eng += 1
FROM dbo.dbo_class x
JOIN dbo.dbo_student s ON s.class_id = x.class_id
JOIN dbo.dbo_score c ON c.student_id = s.student_id
WHERE (c.subject_id = 1 AND c.score_id >= 8)
END
【问题讨论】:
-
应该是
UPDATE x,而不是UPDATE dbo.dbo_class,但是为什么您的触发器没有引用inserted对象? -
@Larnu 用SQL Server,也可以是
UPDATE dbo.dbo_class。 -
要么使用
UPDATE x SET x.exellent_Eng ...,要么删除x.。 -
没错,@GSerg,但
UPDATE x更清楚。UPDATE dbo.dbo_Class和FROM dbo.dbo_class x可以 推断出对象dbo.dbo_Class的 2 个实例;尤其是一个有别名,另一个没有。 -
这个触发器甚至在正确的表上吗?它不应该在
dbo_score表上吗?我假设dbo_student记录必须在相关学生的任何dbo_score记录之前创建......对吗?
标签: sql-server tsql triggers