SQL Server 2017 触发器将旧值作为更新后的新值

Posted

技术标签:

【中文标题】SQL Server 2017 触发器将旧值作为更新后的新值【英文标题】:SQL Server 2017 trigger for old value as new value for AFTER UPDATE 【发布时间】:2020-01-06 14:33:57 【问题描述】:

我使用 SQL Server 2017 Management Studio。我需要一个用于AFTER UPDATE 的触发器(trigg_1),它在col_1 列中插入旧值而不是新值。我将使用新值手动更改列col_1,并且触发器需要使用旧值更改col_1

CREATE TRIGGER trigg_1 
ON table_1 
AFTER UPDATE
AS 
BEGIN

END
GO

【问题讨论】:

这能回答你的问题吗? SQL Server : trigger how to read value for Insert, Update, Delete 您想要的值将在 Deleted 表中,Update Deletes then Inserts。 所以col_1的值不能更新? 样本数据和期望的结果会有所帮助。目前还不清楚触发器应该更改哪些数据。 【参考方案1】:

试试这个:

CREATE TRIGGER trigg_1 
   ON  table_1 
   AFTER UPDATE
AS 
BEGIN

    UPDATE  T2
    SET     T2.COL_1 = T1.COL_1
    FROM    DELETED T1
    INNER JOIN TABLE_1 T2 ON T2.ID = T1.ID /* Here you must link by PK - I suggested PK contains only ID column. */

END
GO

【讨论】:

以上是关于SQL Server 2017 触发器将旧值作为更新后的新值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 的触发器中获取多个字段的旧值和新值?

useState 更新状态值,但将旧值作为参数传递给函数

触发插入旧值

将旧 SQL 表中的数据插入到新表中,列更改为行

MySQL 通过“on duplicate key update”插入新记录时将旧值增加新值

SQL Server 触发器在插入表之前验证数据