关于存储过程的返回值

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

现在想实现一个这样的功能  
  查询一条记录是否存在,  
  存在的话,返回此记录  
  不存在的话,建立它,然后返回记录  
   
  create   procedure   c_insert_sellticket  
  @saleproject_id   int  
    as  
  select   *   from   sale_sellticket   where   sale_project_id=@saleproject_id  
  if     @@rowcount=0  
  begin  
  insert   into   sale_sellticket(sale_project_id)values(@saleproject_id)  
  select   *   from   sale_sellticket   where   sale_project_id=@saleproject_id  
  end  
  go  
   
  上面的代码有个问题,当记录不存在时,第一条查询语句的null结果也会返回给程序,程序接收不到第二条查询语句的值。  
   
  当记录存在时,由于第二条语句不会执行,所以程序是没问题的。  
 

· 网友精彩回答:

发表者:xiaonvjing

建立测试环境:  
    create   table   table1   (id   int,name1   varchar(8),  
  company   varchar(8),date1   datetime)  
   
  create   proc   p1  
  @id   int,  
  @name1   varchar(8)=null,  
  @company   varchar(8)=null,  
  @date1   datetime=null  
  as    
  if   exists(select   id   from   table1   where   id=@id   )  
  begin    
  select   *   from   table1   where   id=@id    
  end    
  else    
  begin    
  insert   into   table1     values(@id,@name1,@company,@date1)  
  select   *   from   table1   where   @id=id    
  end    
     
  exec   p1   3

发表者:morningtea

xiaonvjing(飞扬)   ,  
  这句select   *   from   sale_sellticket   where   sale_project_id=@saleproject_id  
  如果不存在会返回一个null串回来吗,如果只是简单的select语句,没有加上任何计算的函数,例如max(),sum(),avg()应该不会返回一个null集合吧?  
   
  假设会的话,加入没有,返回一个null,那么if   exists(   select   sale_project_id   from   sale_sellticket    
  where   sale_project_id=@saleproject_id)  
  这句也是为true哦,那样你的程式也是有问题,不过我觉得应该不会有null集合产生  
  大家说是吧???

发表者:vivianfdlpw

create   procedure   c_insert_sellticket  
  @saleproject_id   int  
    as  
  set   nocount   on  
  if   not   exists(select   *   from   sale_sellticket   where   sale_project_id=@saleproject_id)  
  begin  
  insert   into   sale_sellticket(sale_project_id)values(@saleproject_id)  
  select   *   from   sale_sellticket   where   sale_project_id=@saleproject_id  
  end  
  select   *   from   sale_sellticket   where   sale_project_id=@saleproject_id  
  set   nocount   off  
  go  
 

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved