• 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使用触发器

  • 相关阅读:
    SpringMVC+Spring3+hibernate4 开发环境搭建以及一个开发实例教程
    SpringMVC 理论与实用技术(二)文件上传
    导入导出封装工具类(二) jXLS Excel报表生成工具类
    导入导出封装的工具类 (一) 利用POI封装
    eclipse 鲜为人知的调试技巧,你用过多少
    前端框架(二)DIV多选复选框框的封装和MySql数据库存取
    WPF/Silverlight Layout 系统概述——Arrange(转)
    WPF/Silverlight Layout 系统概述——Measure(转)
    Border绘制虚线框(转)
    ImageSource使用心得(转)
  • 原文地址:https://www.cnblogs.com/eric_ibm/p/trigger.html
Copyright © 2020-2023  润新知