1. set ANSI_NULLS ON 
  2. set QUOTED_IDENTIFIER ON 
  3. go 
  4.  
  5.  
  6. ALTER TRIGGER [dbo].[incrementalUpdate] ON [dbo].[t_stock]  
  7. for insert,update,delete 
  8. as 
  9. --插入操作 
  10. if not exists(select 0 from deleted) 
  11. begin 
  12. insert into dw_lyg.dbo.f_stock  select * from inserted 
  13. end 
  14.  
  15. --删除操作 
  16. else if not exists(select 0 from inserted) 
  17. begin 
  18. --0代表删除操作,1代表更新操作 
  19. --由于删除操作比较危险,所以我们先将要删除的数据记录到数据仓库里的备份表,再将其删除 
  20. insert into dw_lyg.dbo.f_stock_operation_log select *,0 from deleted 
  21.  
  22. --执行删除操作 
  23. delete dw_lyg.dbo.f_stock from dw_lyg.dbo.f_stock s right join deleted d on 
  24. s.col1 =d.m_col1 and s.col2=d.col2;
  25. --警告:这里的col1和col2必须是表s的联合主键,不然你删除了多条记录,别怪我没提醒你。
  26. end 
  27.  
  28. --更新操作 
  29. else  
  30. begin 
  31. --0代表删除操作,1代表更新操作  
  32. --由于更新操作也比较危险,所以我们先将要更新的数据记录到数据仓库的备份表,再执行更新操作 
  33. insert into dw_lyg.dbo.f_stock_operation_log  select *,1 from deleted 
  34. --执行更新操作 
  35. update dw_lyg.dbo.f_stock set col3=i.col3,col4=i.col4  
  36. from dw_lyg.dbo.f_stock s right join inserted i on 
  37. (s.col1=i.col1 and s.col2=i.col2 );
  38. --警告:原因同上。 
  39. end