sqlserver2005使用触发器

对oracle中的pl/sql编程还是比较熟悉的,但是sql
server2005编写自定义函数、存储过程、触发器等确实跟Oracle语法相差太大,就触发器这一点可以看出Oracle确实比sql
server强悍,起码可以控制在插入前、后的操作。但是sql server却没有。

【问题】

项目用到了My SQL和Sql Server 2005的同步问题,My SQL每天固定的时间跟Sql Server
2005同步一次。那么这所谓的同步不可能是每次将My SQL中表信息全部删除,再从Sql Server2005中拷贝一次。而应该是只更新Sql
Server中变化的东西。

【思路】

1.在sql server2005每一次增删改的时候,我们都记录到一个表(假如入叫synSql)【这个表有两个字段,一个存放着sql语句,比如:insert
into student(sname,sage,srollno)
values('hope',12,'1001')的这种信息;另外一个存放标志位,即表明是否被执行】中。

那么My SQL在与Sql Server保持同步的时候,仅仅只是遍历synSql,执行这里面没有执行过的语句。

2.记录synSql的这个表中的信息,不可能由别的用户在插入的时候完成,这里我们使用触发器

3.触发器使用:

drop trigger insertTest //删除触发器

创建触发器【这里仅仅写了一个插入的实例】
create
trigger insertTest
on test//test是被操作的表名
for insert//是指在插入的时候
as
begin

//这里全部用字符即可,没有必要具体到int,datetime等,具体原理大家也明白
declare @sname varchar(50)
declare
@sage varchar(10)
declare @srollno varchar(50)
declare @result
varchar(2000)

//Inserted是插入之前的表信息,类似于oracle中的old:,LTRIM(RTRIM(sname))是用来去掉多余空格的。
set @sname=(select LTRIM(RTRIM(sname)) from Inserted)

//sage在表中是int型,所以读取出来的信息中没有空格,所以不用trim
set @sage=(select sage from
Inserted)
set @srollno =(select LTRIM(RTRIM(srollno)) from Inserted)

//还有一个需要注意的问题,在sql中如果输出单引号(')那么需要写两个单引号('')
set
@result='insert into test(sname,sage,srollno) values('''+@sname+''','+(@sage)+','''+@srollno+''')'
insert
into sql(sql) values(@result)
--
Raiserror('插入失败啦,哈哈~~~!',16,-1)
end //到这里触发器就创建完毕了

【测试结果】

当我在test表中加入一条信息的时候,通过触发器将该信息插入到synSql表格中。

insert into test(sname,sage,srollno) values('haha',1,'1007');
select *
from synSql;//即可看到信息已经插入了

sqlserver2005使用触发器

转载于:https://www.cnblogs.com/eric_ibm/archive/2012/05/09/trigger.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值