if嵌套问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 18:44:00
那位高手帮我解决一下SQL中的问题,我做了一个存储过程,代码如下:use TSXT
go
create procedure 借书
@bianhao char(10),
@xuehao char(10)
as

if((select 编号
from 借阅表
where 学号=@xuehao)=@bianhao)
begin
if((select 可借
from 图书表
where 编号=@bianhao)>=1)
begin
insert 借阅表
values
(@bianhao,@xuehao,getdate())
update 图书表
set 已借=已借+1 , 可借=可借-1
where 编号=@bianhao
end
else
print('此次借书失败,该书已被全部借出')
end
else
print('此次借书失败,你已经借过这本书')

go
这段代码运行没错,但我在执行存储过程时就有错了,错误提示:
服务器: 消息 512,级别 16,状态 1,过程 借书,行 6
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
此次借书失败,你已经借过这本书
那位高手帮我看一下是那里的问题,谢谢拉!

if((select 编号 from 借阅表 where 学号=@xuehao)=@bianhao) 你的借阅表的编号肯定不是唯一的!假如你输入 @xuehao=001的时候 就会返回1条以上的记录,所以出错了!!!
你把编号改成唯一的,那就不会报错了,还有表里面的数据也要唯一
你想想看
@xuehao 设为xxx @biaohao 设为xx
当 xxx = xx
xxx = xx
x.. = x..
这样下去,数据库能不给你报错吗?