更新“插入”触发器中的“已插入”列 - 稍有不同

时间:2016-04-01 16:46:51

标签: triggers sql-server-2014

我研究了很多但找不到我想要的东西 - (我对SQL中的TRIGGERS知之甚少!请原谅我!)

问:我的桌面上有三个触发器(插入,更新和删除) 在我的AFTER INSERT触发器中:我需要“更新”“插入”列 我正在使用:

UPDATE Table_name
SET Column_name = @Input
(currently)

但我被要求使用类似的东西:

 UPDATE "Inserted.column_name"
 SET Column_name = @Input

但这通常不会发生,因为它会给我一个错误:

  

无法更新逻辑表INSERTED和DELETED

有人可以帮帮我吗?

我看过使用INSTEAD OF TRIGGER的帖子,但这不符合我的目的..提前感谢!感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要更新实际的基础表 - 而不是Inserted伪表....

您需要加入主键上的表,然后更新您的实际数据表 - 类似于

CREATE TRIGGER trg_Insert_Sample
ON dbo.YourTableName
AFTER INSERT
AS
    UPDATE dbo.YourTableName
    SET SomeColumn = i.SomeValue
    FROM Inserted i 
    WHERE dbo.YourTableName.PrimaryKey = i.PrimaryKey

或类似的东西......

需要注意,每个语句一次调用一次 - 每行不会一次 - 所以如果您的INSERT语句插入10行一次(来自例如SELECT),您的触发器称为一次Inserted将包含 10行 - 因此您需要确保触发器代码能够处理这种情况,并以适当的,基于集合的方式编写(无SELECT @Value = SomeColumn FROM Inserted - 无法工作!)