SQL简单的存储过程问题

bilyzhang 2012-12-21 01:49:27
是这样的,一个简单的过程,加几条简单的语句:代码如下:
存储过程
create proc mypro3
@bookname char(50)
as
if (select price from book where book_name like @bookname) >= 29
begin
return 2
end
else
begin
return 1
end

调用语句如下:

declare @return_value int
exec @return_value = mypro3 '%Linux%'
print @return_value
if @return_value =2
print '这本书太贵了'
else
print '这本书还可以'
go

书的实际价格是32元,实际应该返回这本书太贵了,才对,但就是返回这本书还可以。

如果用下面的代码:
if (select price from book where book_name like '%Linux%') >= 29
begin
print 1
end
else
begin
print 2
end
返回的就是正确的结果,返回的是1.但是同样的语句为什么放到存储过程里返回的就是2呢。

如果在上面那段调用语句里改成exec @return_value = mypro3 'Linux 使用指南'也就是改成书的全称,则能返回正常的结果,这是为什么呢,本人菜鸟,不知道怎么回事,谢谢。
...全文
146 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bilyzhang 2012-12-21
  • 打赏
  • 举报
回复
找到原因了,存储过程里字条定义类型不对。
bilyzhang 2012-12-21
  • 打赏
  • 举报
回复
不能,因为数据里就一条能匹配linux的记录。 而且 if (select price from book where book_name like '%Linux%') >= 29 print 2 else print 1 这样查询的结里,正确的是2,返回也是2,没有错的,但把这条语句放到过程里,返回的就是1.
无心雨云 2012-12-21
  • 打赏
  • 举报
回复
if (select price from book where book_name like @bookname) >= 29 你这个里面返回的不止一个价格吧,也就是可能有多条记录,所以才会错
bilyzhang 2012-12-21
  • 打赏
  • 举报
回复
不对啊,刚试完 exec @return_value = mypro3 'Linux%' exec @return_value = mypro3 'Linux 使用指南' 第一条返回结果错误,第二条返回结果正确,请问哪位知道为什么 我觉的问题出在那个like调用上,我想知道我错在哪里
无心雨云 2012-12-21
  • 打赏
  • 举报
回复


create proc mypro3
@bookname char(50),  
@ReturnValue varchar(50) ='0'
as
if (select price from book where book_name like @bookname) >= 29
begin
set @ReturnValue='这本书太贵了'
end
else 
begin
@ReturnValue='这本书还可以'

end

declare @ReturnValue varchar(50)
exec  [dbo].[mypro3] '%Linux%',@ReturnValue
select @ReturnValue

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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