加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:24:13 所属栏目:MsSql教程 来源:网络整理
导读:我有一个有两列的表,我需要一个(columnB)作为另一个列的副本(columnA).因此,如果插入或更新了一行,我希望将columnA中的值复制到columnB. 这就是我现在拥有的: CREATE TRIGGER tUpdateColBON productsFOR INSERT,UPDATE AS BEGIN UPDATE table SET columnB =
我有一个有两列的表,我需要一个(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读