triggers - 更新我的 "Inserted"触发器内的 "Insert"列 - 有点不同

标签 triggers sql-server-2014

我研究了很多,但找不到我想要的- (我对SQL中的TRIGGERS了解很浅-请原谅!)

Qn:我的表上有所有三个触发器(插入、更新和删除) 在我的 AFTER INSERT 触发器中:我需要“更新”“插入”列 我正在使用:

UPDATE Table_name
SET Column_name = @Input
(currently)

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

 UPDATE "Inserted.column_name"
 SET Column_name = @Input

但这通常不会发生,因为它会引发错误:

The logical tables INSERTED and DELETED cannot be updated

有人可以帮我吗?

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

最佳答案

您需要更新实际的基础表 - 而不是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),您的触发器称为 once,并且 Inserted 将包含 10 行 - 因此您需要确保您的触发器代码能够处理这种情况,并且以正确的、基于集合的方式编写(没有 SELECT @Value = SomeColumn FROM Inserted - 这是行不通的!)

关于triggers - 更新我的 "Inserted"触发器内的 "Insert"列 - 有点不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361661/

相关文章:

sql - ORA-04098: 简单触发器无效。为什么?

oracle - 如何在新表中插入受影响的行

sql - Oracle 触发器失败 -ORA-04098

sql - WHERE 大于给定日期时间以减少查询行

python - 连接到本地 SQL Server 实例

sql-server - SQL 级联删除多列

javascript - 点击触发事件太多次 - Jquery

mysql - 触发器创建成功,但未按预期工作

sql-server - 如何从概念上设计查询?

sql-server - IsNumeric 失败并显示 "A severe error occurred on the current command."SQL Server 2014 CTE