如何在使用触发器更新后将数据插入日志表?

时间:2018-04-23 05:42:07

标签: sql sql-server triggers

我是触发器的新手,我试图在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取消更改。

1 个答案:

答案 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;