我有一个包含两列的表格,我需要一个(columnB
)作为另一列的副本(columnA
)。因此,如果插入或更新了某行,我希望将columnA
中的值复制到columnB
。
这就是我现在所拥有的:
CREATE TRIGGER tUpdateColB
ON products
FOR INSERT, UPDATE AS
BEGIN
UPDATE table
SET columnB = columnA
END
现在的问题是查询会影响所有行,而不仅仅是更新或插入的行。我该如何解决这个问题?
答案 0 :(得分: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
但如果ColumnB始终是ColumnA的副本,为什么不创建Computed column?
答案 1 :(得分:0)
触发器中有一个特殊的inserted
表,它包含受INSERT或UPDATE操作影响的行的“后”版本。同样,有一个deleted
表将包含受UPDATE或DELETE操作影响的行的“之前”版本。
因此,针对您的具体情况:
UPDATE t
SET t.columnB = t.columnA
FROM inserted i
INNER JOIN table t
ON i.PrimaryKeyColumn = t.PrimaryKeyColumn