入库表和出库表是2张表。查询入库表时 能够看到每批入库件什么时候出库的。当然某一批入库20件,不一定就是某一批出库20件。根据先进先出原理进行自动匹配。有专人导入入库表,有专人出库。程序自动进行匹配。明白意思的继续往下看。
怎样让程序自动匹配呢? 插入出库表时,触发 执行储存过程。(用到了触发器,插入,删除,更新 都触发)问题来了。这样会产生递归触发的问题,解决的方法 就是建立一个物理表ab,把操作表时 insert ,deleted 表的内容插入到物理表里面。当物理表不为空时,不再执行储存过程(储存过程的最后是清空ab表的内容)
代码如下:
CREATE              trigger   tri_a   on  dbo.出库 
for   update,delete,insert
as 
begin
 if exists(select * from ab)
    return 
   insert ab 
   select distinct jianhao from inserted  union  select distinct jianhao from deleted
   exec pro_auto 
 
end以上 如果多人进行入库操作时,有没有不触发过程的现象。以前也发帖问过,没解决。第二个问题:在写储存过程的时间也用到了一个物理表。因为用到了一个自定义函数。不知道能不能把临时表传递给自定义函数?不知道这种类似的问题 解决方案是怎样的。这套方案没很好解决多人同时操作的问题。郁闷啊

解决方案 »

  1.   

     if exists(select * from ab)
      return 
      insert ab 
      select distinct jianhao from inserted union select distinct jianhao from deleted
      exec pro_auto  首先这里只有插入ab 的语句,请问 你在 pro_auto 执行完后有删除里面的记录吗?
    第二,自定义函数是没法访问临时 表的
      

  2.   

    是啊, 楼主表达的不清楚。
    我的问题表达的很清楚。大家围观一下啊。
    http://topic.csdn.net/u/20100730/10/a089c1ac-d4f7-427e-88e8-b9f61c27a0aa.html?seed=1872781244&r=67348366#r_67348366
      

  3.   

    是啊, 楼主表达的不清楚。
    我的问题表达的很清楚。大家围观一下啊。
    http://topic.csdn.net/u/20100730/10/a089c1ac-d4f7-427e-88e8-b9f61c27a0aa.html?seed=1872781244&r=67348366#r_67348366
      

  4.   

    if exists(select * from ab)
      return  
    这样return不行啊,触发器后面应该执行的部分都没执行
      

  5.   

    对多人同时操作,因操作的是同一表,匹配时涉及入库表的多条记录,建议使用事务,并将事务隔离级别设为可最高,
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE