这个存储过程为什么一调用就出错?

boyandgirl222 2005-08-20 03:02:06
if exists(select name from sysobjects where type = 'P'and name = 'my')
drop proc my
go
create proc my
@a1 varchar(22) ,@a2 varchar(22)
as
begin
return @a1 +@a2
end
go
declare @aa varchar(22)
declare @bb varchar(22)
declare @cc varchar(22)
set @aa='3 '
set @bb='jjj'
exec @cc = my @aa ,@bb
print @cc
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzq111 2005-08-26
  • 打赏
  • 举报
回复
return <integer_expression>
你的存储过程错了
chenqianlong 2005-08-20
  • 打赏
  • 举报
回复
exec @cc = my @aa ,@bb出錯!
樓上正解。
tommysun 2005-08-20
  • 打赏
  • 举报
回复
if exists(select name from sysobjects where type = 'P'and name = 'my')
drop proc my
go
create proc my
@a1 varchar(22) ,@a2 varchar(22),@a3 varchar(44) output
as
begin
Select @a3 = @a1 +@a2

end
go
declare @aa varchar(22)
declare @bb varchar(22)
declare @cc varchar(44)
set @aa='3 '
set @bb='jjj'
execute my @aa ,@bb, @cc output
print @cc
vivianfdlpw 2005-08-20
  • 打赏
  • 举报
回复
存储过程返回值只能是int类型,你的情况需要用输出参数:

if exists(select name from sysobjects where type = 'P'and name = 'my')
drop proc my
go
create proc my
@a1 varchar(22) ,@a2 varchar(22),@a3 varchar(50) out
as
begin
set @a3=@a1 +@a2
end
go

declare @aa varchar(22)
declare @bb varchar(22)
declare @cc varchar(22)
set @aa='3 '
set @bb='jjj'
exec my @aa ,@bb,@cc out
print @cc
filebat 2005-08-20
  • 打赏
  • 举报
回复
返回值只能是整数, 所以它自动会将@a1+@a2转化成整形.
但是'3 jjj'不可能转化成整型,所以就会出错.

你这种情况应该用output的输出参数,而不是返回值.
例如:
if object_id('my') is not null drop proc my
go
create proc my(@a1 varchar(22) ,@a2 varchar(22),
@ret varchar(44) output )
as
begin
set @ret=@a1+@a2
end
go
declare @aa varchar(22),@bb varchar(22),@cc varchar(22)
select @aa='3 ',@bb='jjj'
exec my @aa ,@bb, @cc output
print @cc

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧