【发布时间】:2010-04-28 14:01:37
【问题描述】:
鉴于 SQL Server 不允许修改触发器中的逻辑 INSERTED 和 DELETED 表,是否有一种简单的方法可以更改单个列的值而不必重新编写整个插入语句?
例如,我应用触发器的表有 20 列。我想修改 INSERTED 表中一列(每行)的值,然后将该行插入表中。我可以在不编写包含 19 列加上我正在修改其值的一列的插入语句的情况下这样做吗?
【问题讨论】:
标签: sql-server triggers
鉴于 SQL Server 不允许修改触发器中的逻辑 INSERTED 和 DELETED 表,是否有一种简单的方法可以更改单个列的值而不必重新编写整个插入语句?
例如,我应用触发器的表有 20 列。我想修改 INSERTED 表中一列(每行)的值,然后将该行插入表中。我可以在不编写包含 19 列加上我正在修改其值的一列的插入语句的情况下这样做吗?
【问题讨论】:
标签: sql-server triggers
是的,只需使用“插入后”触发器,而不是“代替插入”触发器。
这样该行已经被插入到表中,您所要做的就是发出一个(精心设计的)更新语句,通常通过主键字段上的 INSERTED 表进行内连接。
【讨论】:
要向 BradCs 答案添加更多细节:
使用连接进行更新的语法有点奇怪
Update table
set columnA = inserted.columnA / 10
from table
inner join inserted on table.id = inserted.id
【讨论】: