表名为:任务单,表的结构是:批次、班组、完成记录,批次+班组为主键,传入参数(批次、班组),如果完成记录为空传出参数就为空,否则就是查到的值。下面的语句该怎么改?
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
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
@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
(@pi int,
@ban varchar(30),
@f varchar output)
as
begin
select @f=完成记录 from 任务单 where 批次=@pi and 班组=@ban
set @f=isnull(@f,'0')
end这是存储过程不是函数
返回的结果值需与变量定义的类型一致,否则错误。
你的@f的定义也是错误的,就是varchar(长度).
@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