2013-09-24 24 views
0

我正在更新一個名爲A的表,當更新事件發生時觸發器被觸發。我的要求是我需要將數據插入到另一個表(從A到B),該表的值是從虛擬表(已刪除和插入)獲得的。如何設置插入和刪除虛擬表值如何在觸發器中設置虛擬表(插入和刪除)值

TRIGGER

CREATE TRIGGER trgAfterUpdate ON A 
FOR UPDATE 
AS 
BEGIN 
Insert into B(col1,col2,col3,col4,col5) values() // col1 to 4 inserted values col5 Deleted table value 
END 
+0

是否表'A'有一個主鍵? – GarethD

+0

@GarethD是具有自動標識的主鍵 – Vignesh

回答

1
Insert B(col1,col2,col3,col4,col5) 
select inserted.col1, inserted.col2, inserted.col3, inserted.col4, deleted.col5 
from inserted 
    inner join deleted on inserted.IDField = deleted.IDField 
+0

因此,您的代碼將看起來像「插入到B(col1,col2,...)的值(選擇inserted.col1,...從插入的內部聯接中刪除插入的.col5 =刪除.col5)「是不是? – Vignesh

+0

如果col5是唯一的ID,那麼它通常不會改變,那麼爲什麼你需要刪除的表? – podiluska

0

我工作的同類型項目,我必須採取定期更新,一定時間後,插入此表,但表應包含所有獨特的價值...解決這個我做了以下。

  1. 拿了兩張類似的實體表。

  2. 表中的之一,我把所有的值,並在此之後我比較這對其他表得到重複的數據並在此之後刪除它,然後通過複製表格形式彼此其插入到新表..


SqlCommand cmd2 = new SqlCommand("delete table2 from table2 inner join tabl1 on table1.some entries=table2.on same entry", connection_object);  
cmd2.ExecuteNonQuery(); 
SqlCommand cmd3 = new SqlCommand("insert into table1 (all values) select all values from table2", connection_object); 
cmd3.ExecuteNonQuery(); 
connection_object.Close();