SQL Server 做增量

SQL Server 做增量,同步数据方法一:

1)sql server增量到sql server 中


create trigger insert_for_b on a
after insert
as
begin
insert into b(插入a表字段)
select 插入a表字段 from inserted
--插入a表字段表示a表的所有字段,如果这里需要b表其他字段,要加固定的值
end
go
 
eg: 

create trigger insert_for_student on classmeet
after insert
as
begin
insert into student(id,name,sex)
select id,name,sex from inserted
--插入a表字段表示a表的所有字段,如果这里需要b表其他字段,要加固定的值
end
go


2)在做增量时候,修改数据

最近有个使用触发器实现对插入数据的某个列做更改的需求,因此整理了Oracle和SQL Server对于此类需求的触发器写法,本文仅提到了Insert触发器。

首先我们创建一张表:

[csharp]  view plain  copy
  1. --创建Test表  
  2. Create table test(id int primary key,name varchar(20),sex varchar(1),status int)  

我们的目的是实现新插入的数据满足sex字段为null时就把status设为1的需求,可根据实际需要更改条件。

因此SQL Server的写法为:

[csharp]  view plain  copy
  1. Create trigger [dbo].[trg1] on [dbo].[test] for insert   
  2. as   
  3. Declare c cursor for select id,sex from inserted  
  4. Declare @id int  
  5. Declare @sex varchar(1)  
  6. Open c  
  7. FETCH NEXT FROM c INTO @id,@sex  
  8. While @@FETCH_STATUS = 0  
  9. Begin  
  10.     if @sex is null  
  11.     update dbo.test set status=1 where id=@id  --这里使用主键进行更新以便效率最大化  
  12.     FETCH NEXT FROM c INTO @id,@sex  
  13. END  
  14. CLOSE c  
  15. DEALLOCATE c  

PS:

@@fetch_status是MSSQL的一个全局变量

其值有以下三种,分别表示三种不同含义:【返回类型integer】

0 FETCH 语句成功

-1 FETCH 语句失败或此行不在结果集中

-2 被提取的行不存在

@@fetch_status值的改变是通过fetch next from实现的

“FETCH NEXT FROM Cursor”




oracle的写法为:

[csharp]  view plain  copy
  1. Create or replace trigger trg1   
  2. before insert on test  
  3. referencing new as new old as old  
  4. for each row  
  5. Begin  
  6.     if :old.sex is null then  
  7.     :new.status:=1;  
  8.     end if;  
  9. End trg1;  

也可以实现同样的功能。

总结与比较:

我们发现由于Oracle提供了before/after的触发器写法因此实现起来更为简单,而SQL Server只能依靠游标来实现,显然Oracle的实现办法更加简单明了。

但并不是说所有情况下Oracle的语法都更好,某些时候SQL Server的语法也可以实现Oracle触发器很难实现的功能。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值