http://expert.csdn.net/Expert/topic/1246/1246690.xml?temp=.9491999

解决方案 »

  1.   

    create procedure 过程名
    as
    begin
      select 1 对了,cbh,sum(-sl) num into #temp from xsb group by cbh
      update fkcb set number=number-a.num from #temp a where fkcb.cbh=a.cbh and fkcb.ckbh=1
      insert fkcb select * from #temp where cbh not in (select cbh from fkcb)
      insert xsbckup select * from xsb
      delete xsb
      drop table #temp
    end
    不行吗??
      

  2.   

    where fkcb.cbh=a.cbh and fkcb.ckbh=1fkcb.ckbh=1 这个1是从ckzlb仓库表里取得的默认库的值select ckbh,mr from ckzlb
    where mr=1
    得到ckbh,
    应该是个动态的。
      

  3.   

    create procedure 过程名
    as
    begin
    begin stran
      select 1 ,cbh,sum(-sl) num into #temp from xsb group by cbh
      update fkcb set number=number-a.num from #temp a where fkcb.cbh=a.cbh and fkcb.ckbh=1
      insert fkcb select * from #temp where cbh not in (select cbh from fkcb)
      insert xsbckup select * from xsb
      delete xsb
      drop table #temp
    //如果出错了返回错误怎么写的。
    end
      

  4.   

    ----得到默认值
    select text from syscomments 
    where id = 
      (select cdefault from syscolumns 
       where id = object_id('ckzlb') and name = 'mr')
    ------------------------------------------------
    create procedure 过程名
    as
    begin
      select 1 对了,cbh,sum(-sl) num into #temp from xsb group by cbh
      update fkcb set number=number-a.num from #temp a where fkcb.cbh=a.cbh and fkcb.ckbh in (select text from syscomments 
    where id = 
      (select cdefault from syscolumns 
       where id = object_id('ckzlb') and name = 'mr'))
      insert fkcb select * from #temp where cbh not in (select cbh from fkcb)
      insert xsbckup select * from xsb
      delete xsb
      drop table #temp
    end
      

  5.   

    if @@error<>0
      select '错了' mess
    else
      elsect 'OK' mess
      

  6.   

    谢谢大力,其实也挺简单的。哈 哈 ,
    fkcb.ckbh in (select ckbh from ckzlb where ckzlb.mr='1')
    我想这样没问题
      

  7.   

    我还以为是要取字段的默认值
    create procedure 过程名
    as
    begin
      select 1 对了,cbh,sum(-sl) num into #temp from xsb group by cbh
      update fkcb set number=number-a.num from #temp a where fkcb.cbh=a.cbh and fkcb.ckbh in (select ckbh from ckzlb where ckzlb.mr='1')
      insert fkcb select * from #temp where cbh not in (select cbh from fkcb)
      insert xsbckup select * from xsb
      delete xsb
      drop table #temp
    end
      

  8.   

    但我还是没搞懂为什么要用#temp,而不直接用xsb,是不是这样会快些。好象先把xsb进行统计之后存入#temp,
      

  9.   

    fkcb.ckbh in (select ckbh from ckzlb where ckzlb.mr='1')是不是每次都执行了。
    可以这样写不create procedure 过程名
    as
    begin
    DECLARE @ckbh int
    Begin stran
    set @ckbh=(select ckbh from ckzlb where ckzlb.mr='1')
      select 1 对了,cbh,sum(-sl) num into #temp from xsb group by cbh
      update fkcb set number=number-a.num from #temp a where fkcb.cbh=a.cbh and fkcb.ckbh=@ckbh
       insert fkcb select * from #temp where cbh not in (select cbh from fkcb)
      insert xsbckup select * from xsb
      delete xsb
      drop table #temp
      commit;
    if @@error<>0
      select '错了' mess
    else
      elsect 'OK' messend
    这样写有问题吗?