to:vivianfdlpw() 
能说的再详细一点嘛?或者举个例子也好啊,谢谢了!!!!!!!!

解决方案 »

  1.   

    b表跟随a表更新,不外乎 “实时”与“延时”两种方式。
    vivianfdlpw() 介绍的是“实时处理”,而这会影响你一笔事务的处理时间的,当然简单处理耗时可忽略不计。
    而“延时处理”则可采用对更新标志位的轮巡处理,采用该方式的前提是,业务需求对b表更新及时率要求不高。
      

  2.   

    1.触发器
    create trigger test
    on a
    for update 
    as 
    update b
    set b.ccc = (select a.fff from inserted i
    where i.id = a.id )---假设id是他们关联字段
    from a.inserted i2.sp 
    create procedure test
    @id as int,
    @fff as varchar(10),
    as 
    if exists (select 1 from a where a.id = @id)
    begin
    begin transaction
    update a set a.fff = @fff where a.id = @id
    if @@error <> 0
    begin 
    rollback transaction
    return 1  表示更新a失败
    end
    if exists (select 1 from b where b.id = @id)
    begin
    update b set b.ccc = @fff where b.id = @id
    if @@error <> 0
    begin
    rollback transaction
    return 2  表示更新b失败 --如果不存在就当也是成功
    end
                    end
    commit transaction
    end
    return 0--a表不存在可更新资料FYI
      

  3.   

    to:MorningTea(一勺抹茶) 
    你的第二种方法,参数是哪传过来的啊?程序中?循环得到吗?
      

  4.   

    如果是从程序中控制触发的,这个字段在我触发之前a表中的fff字段内容又改回来原来的样子了,那么b表就不能及时响应了,因为我想达到的效果是:当a表中的fff字段更改了由有值变成空值,这样操作的人才可以更改a表中对应的记录,而b表就是为了防止a表中数据的更改,在当a表更改了fff字段,b表中用ccc字段做标志,表示已经更改过
      

  5.   

    首先告诉你,都影响!你原来只是更新一个表,现在2个,动作多了,速度当然有影响!我们不能认为更新完了a就算,你的逻辑要求同时更新b,所以要整个完成才算完成你问的影不影响更新a,问题是更新a先,后更新b,在一批的更新,肯定影响1.从提高程序的运行速度的来看,sp在创建后,被数据库服务器进行语法和句法分析,以编译了的形式存储在数据库中,可以被有权用户在任何需要的地方调用。当客户端应用程序调用时,只需发送一条调用命令,数据库服务器就会执行该过程。2.从提高可维护性来说,对表中数据进行修改、删除或插入是非常常见的操作。当表被修改时,应该自动给其他需要执行操作的程序发信号。触发器可以完成这一功能。所以呢,从速度上来讲使用sp速度更优,但是要写的好,我上面只是随便举个例子而已,写的也不好,从维护的效率来讲,trigger更加方便!你问速度,
    1。如果你每次只是更新一条数据,然后触发更新或者在sp同时修改b表,只问更新a表的速度,当然可以勉强说不影响2。如果是频繁更新,中间就有相同次数的触发更新或者在sp同时修改b表,速度肯定变慢所以,我觉得用触发,sp(多更新b表的东西),相对你原来的单独更新b表的整体平均速度肯定要慢!用触发器会有什么弊端呢?---弊端就是如果触发器要操作的语句太多,统计数据的方法复杂!!速度会非常慢。不过如果逻辑真是非常复杂,那慢也没有办法!!只能优化代码罗