Triggers 更新「;插入“;“我的”中的列;插入“;触发-有点不同
我做了很多研究,但找不到我想要的- (我对SQL中的触发器知之甚少-请原谅!) Qn:我的表上有三个触发器(插入、更新和删除) 在插入后触发器中:我需要“更新”插入列 我用的是: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 但这通常不会发生,因为这会给我带来一个错误: 无法更新插入和删除的逻
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