(1)分别对三张表进行操作,客户端会发出三次对服务器的操作请求,增大网络流量。
(2)建立触发器,批量更新数据时不行,inserted和deleted中只保留批量更新的最后一条记录。
(3)使用存储过程(推荐使用),在存储过程中同时包含对三张表的更新,性能也最高。不过唯一缺点是当直接对某表进行操作时(如在sql server的企业管理器中更改表)时,无法保持三张表数据一致(不过一般不会允许用户这样操作),可使用外键约束来保证其数据完整性。

解决方案 »

  1.   

    haor,你的意思是否指(1)不可取;(2)中批量更新数据不行是什么意思,SQL SERVER的触发器会因为批量更新数据不行的?我看书看漏了;(3)怎么处理批量更新数据呢?
      

  2.   

    比如update Table1 set Field1=Value where ……可能对该表多条数据产生影响,用触发器只能判断该语句所影响的最后一条记录。
    使用存储过程:
    create proc ProcName
    (@参数1,@参数2……,@操作类型)
    as
    if @操作类型="I"
      begin
        insert into table1 values(……)
        insert into table2 values(……)
        insert into table3 values(……)
      end
    if @操作类型="U"
      begin
        ……
      end
    if @操作类型="D"
      begin
        ……
      end
    go
      

  3.   

    haor,好象你这样把对该表的增删改写入一个存储过程好,还是分开好呢?
    而当“U”的时候进行批量更新也OK吗?
      

  4.   

    其实,实际开发SQL SERVER数据库程序的时候,用到触发器和存储过程的机会多不多呢?由于我是涉世未深的大学生,开发经验不足够,所以想请教。
      

  5.   

    这个问题提得不错,我关注,期望haor可以更进一步深入回答,小弟也可以受益非浅。
      

  6.   

    我代表haor回答这个问题:
    尽量把一次对数据库的操作用一个存储过程完成以提高效率。
    用存储过程分别对三张表进行update当然可以都批量进行。
    实际开发中一般不常用trigger(一般只有在程序后期制作打补丁的时候用trigger来应急),使用trigger会降低一些效率。
    在传统的C/S开发方式中使用存储过程的机会较多,除了对数据的一些基本操作外,对数据操作的业务规则解释也可以由存储过程来完成。不过使用三层式结构开发的程序中一般业务规则已放到中间层处理,使用存储过程的机会相对减少。
      

  7.   

    我明白了,立即给分,谢谢haor和libby!
      

  8.   

    to haor(一个好人):
       那么在ASP程序中如何调用你所creat的存储过程ProcName呢?