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"。
求解答。 展开
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"。
求解答。 展开
2个回答
展开全部
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;
这个错误。可写作:
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
展开全部
我给你说下触发器的概念吧
触发器是你对表做插入、更新或删除动作 触发的事件
是不可能有变量的 这不是存储过程 不用也不能传参数 内部也不行
你那个条件这样写:
if exists(select 1 from Book join inserted on inserted.bno=Book.bno
where Book.bno is not null)
下面一个类似
然后你的if 语句写的也有问题 逻辑混乱
触发器是你对表做插入、更新或删除动作 触发的事件
是不可能有变量的 这不是存储过程 不用也不能传参数 内部也不行
你那个条件这样写:
if exists(select 1 from Book join inserted on inserted.bno=Book.bno
where Book.bno is not null)
下面一个类似
然后你的if 语句写的也有问题 逻辑混乱
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询