表名为:任务单,表的结构是:批次、班组、完成记录,批次+班组为主键,传入参数(批次、班组),如果完成记录为空传出参数就为空,否则就是查到的值。下面的语句该怎么改?
create procedure aaa
@pi int,
@ban varchar(30),
@f  varchar output
select @f=完成记录 from 任务单 where  批次=@pi and 班组=@ban
if @f is null  return 0
else return @f
go

解决方案 »

  1.   

    create procedure aaa
    @pi int,
    @ban varchar(30),
    @f  varchar(30) output
    as
    select @f=完成记录 from 任务单 where  批次=@pi and 班组=@ban
    if @f is null
      return '0'
    else 
      return @f
    go
      

  2.   

    create procedure aaa
    (@pi int,
    @ban varchar(30),
    @f  varchar output)
    as 
    begin
    select @f=完成记录 from 任务单 where  批次=@pi and 班组=@ban
    set @f=isnull(@f,'0')
    end这是存储过程不是函数
      

  3.   

    注意:
      返回的结果值需与变量定义的类型一致,否则错误。
    你的@f的定义也是错误的,就是varchar(长度).
      

  4.   

    create procedure aaa
    @pi int,
    @ban varchar(30),
    @f  varchar output  -- 这里已经是输出参数, 所以不用return
    as
    select @f=完成记录 from 任务单 where  批次=@pi and 班组=@ban
    go-- 调用
    declare @f varchar
    exec aaa @pi =1, @ban = 'abc', @f=@f out
    select @f