代码如下:
   create procedure product
      @name varchar(20),
      @code varchar(20),
      @num  int,
      @Error
   as
     declare @pnum  int,
             @snum  int
     select @pnum=sum(pnum) from productone//表一
     select @snum=sum(snum) from producttwo//表二
     if @pnum>0
     begin
       if (@pnum-@snum>0) and (@pnum-@snum-@num>0)
       begin
         insert into producttwo(name,code,num)
             values(@name,@code,@num)
       end
      select @Error=@@Error
      return @Error
     end
    问题是:
      不想表中插入值,就是不执行insert 语句,这是怎么回事?
      高手帮忙!!

解决方案 »

  1.   

    不执行insert那一定是没满足条件呀
    if (@pnum-@snum>0) and (@pnum-@snum-@num>0)
    应该是这个没满足吧
      

  2.   

    向表一中我输入如下值:
       name :=zhang
       code:=ss-ss
       pnum:=14
    表二呢,是空的
       测试值如下;
         name ;=zhang
         code;=ss-ss
         num:=3
    查看表二时,仍然是空的
      

  3.   

    问题应该出在这个判断  if (@pnum-@snum>0) and (@pnum-@snum-@num>0)
    表二中执行的结果集为空时,用@Num值运算时有错误的,我随便用作了一个存储过程, 证明了这一点
      

  4.   

    在涉及到数据操作比较运算时,最好用NVL函数判断是否为空
      

  5.   

    select @pnum=sum(pnum) from productone//表一
    select @snum=sum(snum) from producttwo//表二做如下修改
    select @pnum=ISNULL(sum(pnum),0) from productone//表一
    select @snum=ISNULL(sum(snum),0) from producttwo//表二这样应该可以的