- set ANSI_NULLS ON
- set QUOTED_IDENTIFIER ON
- go
- ALTER TRIGGER [dbo].[incrementalUpdate] ON [dbo].[t_stock]
- for insert,update,delete
- as
- --插入操作
- if not exists(select 0 from deleted)
- begin
- insert into dw_lyg.dbo.f_stock select * from inserted
- end
- --删除操作
- else if not exists(select 0 from inserted)
- begin
- --0代表删除操作,1代表更新操作
- --由于删除操作比较危险,所以我们先将要删除的数据记录到数据仓库里的备份表,再将其删除
- insert into dw_lyg.dbo.f_stock_operation_log select *,0 from deleted
- --执行删除操作
- delete dw_lyg.dbo.f_stock from dw_lyg.dbo.f_stock s right join deleted d on
- s.col1 =d.m_col1 and s.col2=d.col2;
- --警告:这里的col1和col2必须是表s的联合主键,不然你删除了多条记录,别怪我没提醒你。
- end
- --更新操作
- else
- begin
- --0代表删除操作,1代表更新操作
- --由于更新操作也比较危险,所以我们先将要更新的数据记录到数据仓库的备份表,再执行更新操作
- insert into dw_lyg.dbo.f_stock_operation_log select *,1 from deleted
- --执行更新操作
- update dw_lyg.dbo.f_stock set col3=i.col3,col4=i.col4
- from dw_lyg.dbo.f_stock s right join inserted i on
- (s.col1=i.col1 and s.col2=i.col2 );
- --警告:原因同上。
- end
转载于:https://blog.51cto.com/luxiao1223/476207