2012-01-30 67 views
4

我有一張兩列的表格,我需要一張(columnB)作爲另一張的副本(columnA)。因此,如果插入或更新了一行,我希望將columnA的值複製到columnB如何製作隻影響已更新/插入的行的觸發器?

這是我現在有:

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

現在的問題是,查詢會影響所有的行,而不只是被更新或插入的一個。我將如何去解決這個問題?

回答

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呢?

Using the inserted and deleted Tables

0

在觸發器中有一個特殊的inserted表,它將包含受INSERT或UPDATE操作影響的行的「after」版本。同樣,有一個deleted表將包含受UPDATE或DELETE操作影響的行的「before」版本。

因此,對於您的具體情況:

UPDATE t 
    SET t.columnB = t.columnA 
    FROM inserted i 
     INNER JOIN table t 
      ON i.PrimaryKeyColumn = t.PrimaryKeyColumn