我是触发器的新手,我试图在Alumns表更新后将数据插入到日志表中。
| Alumn_ID (PK) | Name | Courses | Favourite_Course
1 Peter 5 3
| Log_ID | Alumn_ID | Note
1 1 Number of courses was changed
由于某种原因它不允许我插入Alumn ID并且触发器不起作用,我也找不到如何将日志ID作为标识插入
ALTER TRIGGER [LOG]
ON ALUMNS
AFTER UPDATE
AS
BEGIN
DECLARE @Note VARCHAR(50)
DECLARE @Alumn_ID varchar;
SELECT @Alumn_ID= INSERTED.Alumn_ID FROM INSERTED
IF UPDATE(Name)
BEGIN
SET @Note = 'Updated Name'
END
INSERT INTO Alumn_Log (Log_ID, Note)
VALUES (@Alumn_ID, '@Alumn')
END
之后我试图修改名称以查看触发器是否有效并且我得到下一个错误:
ERROR:
没有更新行
第1行中的数据未提交。 错误来源:.Net SqlClient数据提供程序。 错误消息:指令INSERT与限制FOREIGN KEY“FK_ALUMN_LOG_ALUMN_ID”冲突。 冲突出现在数据库“SCHOOL”,表“dbo.ALUMNS”,列“ALUMN_ID”中。 指示结束。
更正错误并重试,或按ESC取消更改。
答案 0 :(得分:3)
据推测,触发器不起作用,因为id
有多个字符。
我不知道@Note
应该做什么,因为它没有被使用。所以,你的逻辑可以简化为:
ALTER TRIGGER [LOG] ON ALUMNS AFTER UPDATE AS
BEGIN
INSERT INTO Alumn_Log (Log_ID, Note)
SELECT i.Alumn_ID, '@Alumn'
FROM inserted i;
END;