我研究了很多,但找不到我想要的- (我对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/