如何创建仅影响已更新/插入的行的触发器?

Pet*_*din 4 sql-server triggers

我有一个有两列的表,我需要一个(columnB)作为另一个()的副本columnA.因此,如果插入或更新了一行,我希望将值columnA复制到columnB.

这就是我现在拥有的:

CREATE TRIGGER tUpdateColB
ON products
FOR INSERT, UPDATE AS
    BEGIN
        UPDATE table
        SET columnB = columnA
    END
Run Code Online (Sandbox Code Playgroud)

现在的问题是查询会影响所有行,而不仅仅是更新或插入的行.我该如何解决这个问题?

Mit*_*eat 5

假设您有一个主键列,id(并且您应该有一个主键),请加入inserted表(使触发器能够处理多行):

CREATE TRIGGER tUpdateColB 
ON products 
FOR INSERT, UPDATE AS 
    BEGIN 
        UPDATE table 
        SET t.columnB = i.columnA 
        FROM table t INNER JOIN inserted i ON t.id = i.id
    END 
Run Code Online (Sandbox Code Playgroud)

但是,如果ColumnB始终是ColumnA的副本,为什么不创建Computed列呢?

使用inserted和deleted表