我研究了很多但找不到我想要的东西 - (我对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
的帖子,但这不符合我的目的..提前感谢!感谢您的帮助!
答案 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
- 无法工作!)