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

前端之家收集整理的这篇文章主要介绍了sql-server – 如何创建仅影响已更新/插入的行的触发器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个有两列的表,我需要一个(columnB)作为另一个列的副本(columnA).因此,如果插入或更新了一行,我希望将columnA中的值复制到columnB.

这就是我现在拥有的:

CREATE TRIGGER tUpdateColB
ON products
FOR INSERT,UPDATE AS
    BEGIN
        UPDATE table
        SET columnB = columnA
    END

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

解决方法

假设您有一个主键列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

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

Using the inserted and deleted Tables

猜你在找的MsSQL相关文章