首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

小弟我的存储过程执行几次后,自动消失了,什么情况

2014-01-13 
我的存储过程执行几次后,自动消失了,什么情况?我在sql2000里执行了一个存储过程,其实使用了一个临时表,但

我的存储过程执行几次后,自动消失了,什么情况?
我在sql2000里执行了一个存储过程,其实使用了一个临时表,但是没有删除存储过程的语句,怎么存储过程会消失了,但是在sql2005里使用就是正常的。请问这是怎么回事?我吧存储过程贴出来,请大神帮我解答。



if exists(select name from sysobjects where name='NonSaleOut'and type='p')
drop procedure NonSaleOut
go
create procedure NonSaleOut
@danh varchar(50)--单号
as 
begin
  declare @goods_count int--配送出库产品种类(总行数)
  declare @goodsid varchar(50)--商品条码
  declare @goodsname varchar(50)--商品名称
  declare @kucun_count float --库存数量
  declare @ps_count float --配送单某条码的数量
  declare @ps_number int --配送明细单序号
  declare @check int  --检验数量
  declare @kdbm varchar(50)--开单部门
  declare @bmbm varchar(50)--开单部门代码
  declare @shck varchar(50)--收货仓库
  declare @ckbm varchar(50)--收货仓库代码
  declare @kdsj  varchar(50)--开单时间
  declare @id varchar(50) --退货单id号
  declare @jbr varchar(50) --经办人
  declare @jine float--商品销售价
  declare @remark varchar(50)--备注
  declare @errno int 
  set @errno=0
  set @check=0
  set @ps_number=0--配送明细单序号,初始为0
  select @goods_count=count(*) from NONSALEOUTDETAIL where danh=@danh--获取配送单商品种类数量
  select @kdbm=kdbm,@bmbm=bmbm,@shck=shck,@ckbm=ckbm,@kdsj=kdsj,@jbr=jbr from NONSALEOUTDOC where danh=@danh 
  SELECT IDENTITY(int, 1,1) AS id,convert(int,gid)as gid,danh,goodsname,goodsid,shul,jine,remark into #nonsaleout from NONSALEOUTDETAIL where danh=@danh

Begin TransAction --事务开始
     while (@ps_number<@goods_count)
        begin
           set @ps_number=@ps_number+1--配送明细单序号自增一
           select @goodsname=goodsname,@goodsid=goodsid,@ps_count=shul,@jine=jine,@id=gid,@remark=remark from #nonsaleout where id=@ps_number--获取某条细单的商品名称,商品条码,数量
           select @kucun_count=count(*) from QL_SSTORE_GOODS where goodsid=@goodsid

              if (@kucun_count>0)
                  begin
                      update GOODS set stock=convert(numeric(18,2),(stock-@ps_count)) where goodsid=@goodsid
                      set @errno=@errno+@@error
                      insert into CHANGES(gsdh,goodsname,goodsid,shul,jine,kdsj,kdry,remark) select danh,goodsname,goodsid,-shul,jine,convert(varchar(20),getdate(),120),@jbr,'aa' from NONSALEOUTDETAIL  where danh=@danh and goodsid=@goodsid and gid=@id
                      set @errno=@errno+@@error
                   end
              else
                  begin
                      insert into GOODS(goodsname,goodsid,stock,price,clerk,inputtime)values(@goodsname,@goodsid,convert(numeric(18,2),-@ps_count),@jine,@jbr,convert(varchar(20),getdate(),120))
                      insert into CHANGES(gsdh,goodsname,goodsid,shul,jine,kdsj,kdry,remark) select danh,goodsname,goodsid,-shul,jine,convert(varchar(20),getdate(),120),@jbr,'aa' from NONSALEOUTDETAIL  where danh=@danh and goodsid=@goodsid and gid=@id
                      set @errno=@errno+@@error
                  end

     end--while循环结束
  
     if(@ps_number=@goods_count)--判断数据是否插入完
         begin
            update NONSALEOUTDOC set suodsm='过账',suod='3' where danh=@danh
            set @errno=@errno+@@error
            set @check=0
         end


     else---检验
         begin
           set @check=1
         end

--------如果事务过程中出现问题,回滚整个事务;
      If ((@errno)>0 or(@check>0))
         begin 
            print('事务处理失败,回滚事务!')
            rollback TransAction 
         end 
       Else
         Begin 
            print('事务处理成功,提交事务!')
            Commit TransAction
         End 
end


[解决办法]
存储过程没看出什么问题。
看看表格的触发器,有没有误写代码.
[解决办法]
引用:
Quote: 引用:

存储过程没看出什么问题。
看看表格的触发器,有没有误写代码.

没有,全都都是这些代码,在sql2005是完全正常的。就是在sql2000才出现这个情况,我就纳闷了。
难道sql2000有漏洞?

如果有这种漏洞,微软早倒闭了。
我还是觉得你的代码,或者设计有问题。

热点排行