Triggers 更新「;插入“;“我的”中的列;插入“;触发-有点不同

Triggers 更新「;插入“;“我的”中的列;插入“;触发-有点不同,triggers,sql-server-2014,Triggers,Sql Server 2014,我做了很多研究,但找不到我想要的- (我对SQL中的触发器知之甚少-请原谅!) Qn:我的表上有三个触发器(插入、更新和删除) 在插入后触发器中:我需要“更新”插入列 我用的是: UPDATE Table_name SET Column_name = @Input (currently) 但我被要求使用类似于: UPDATE "Inserted.column_name" SET Column_name = @Input 但这通常不会发生,因为这会给我带来一个错误: 无法更新插入和删除的逻

我做了很多研究,但找不到我想要的- (我对SQL中的触发器知之甚少-请原谅!)

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

UPDATE Table_name
SET Column_name = @Input
(currently)
但我被要求使用类似于:

 UPDATE "Inserted.column_name"
 SET Column_name = @Input
但这通常不会发生,因为这会给我带来一个错误:

无法更新插入和删除的逻辑表

有人能帮我吗


我看到过关于使用
而不是TRIGGER
的帖子,但这不符合我的目的。。提前谢谢!谢谢你的帮助

您需要更新实际的基础表,而不是插入的伪表。

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

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
),则触发器将被调用一次,而插入的
将包含10行-因此您需要确保触发器代码能够处理这种情况,并且以正确的、基于集合的方式写入(无
从插入的
中选择@Value=SomeColumn-这将不起作用!)

您需要更新基础表,而不是插入的
伪表。使用主键上插入的
伪表联接您自己的表,然后更新受此触发操作影响的实际表我已在我的psuedo表上写入联接。。但你能再举个例子吗?我编写了如下的连接更新表\u name SET[Col\u name]=@Input FROM table t join INSERTED ON t.Primary\u key=INSERTED.Id