SQL触发器,无法绑定由多个部分组成的标识符

createtriggerBorrowBookonBorrowforinsertasbegindeclare@bnochar(8)select@bno=Borrow.bn... create trigger BorrowBook on Borrow
for insert
as begin
declare @bno char(8)
select @bno = Borrow.bno from inserted
if exists(select* from Book
where Book.bno = @bno and Book.bno is not null)
if( Book.bno = @bno and Book.bcount2>0)
update Book set bcount2 = bcount2-1 where Book.bno = @bno;
else print'该书已借光'
else print'该书不存在'
end;
Borrow是一个借书记录的表,Book是书库表,我想让往里面存入借书记录的时候,书库里对应的书籍的数量就减一,但是报错:
消息 4104,级别 16,状态 1,过程 BorrowBook,第 5 行
无法绑定由多个部分组成的标识符 "Borrow.bno"。
消息 4104,级别 16,状态 1,过程 BorrowBook,第 8 行
无法绑定由多个部分组成的标识符 "Book.bno"。
消息 4104,级别 16,状态 1,过程 BorrowBook,第 8 行
无法绑定由多个部分组成的标识符 "Book.bcount2"。
求解答。
展开
 我来答
acode
推荐于2018-04-15 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:183
采纳率:100%
帮助的人:64.1万
展开全部
select @bno = Borrow.bno from inserted
这个错误。可写作:
select @bno = inserted.bno from inserted
或:
select @bno = bno from inserted
第8行。 if( Book.bno = @bno and Book.bcount2>0)
Book这个不能这样写。上句可去掉。直接用下句即可。
update Book set bcount2 = bcount2-1 where Book.bno = @bno;
追问
谢谢你~但是我想在不满足Book.bcount2>0的情况下输出“该书已借光”,在Book.bno is null的情况下输出“该书不存在”,应该怎么写呢?
追答
示例如下:
select *,
CASE WHEN bount2>0 then '该书已借光'
else CASE WHEN BNO IS NULL THEN '该书不存在' ELSE BNO END END
from Book
17号观察室
2013-05-16 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1365万
展开全部
我给你说下触发器的概念吧
触发器是你对表做插入、更新或删除动作 触发的事件
是不可能有变量的 这不是存储过程 不用也不能传参数 内部也不行
你那个条件这样写:
if exists(select 1 from Book join inserted on inserted.bno=Book.bno
where Book.bno is not null)
下面一个类似
然后你的if 语句写的也有问题 逻辑混乱
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式