日期:2014-05-18  浏览次数:20535 次

存储过程与外键冲突
请帮忙看看以下这段语句,错误信息是:
INSERT 语句与 FOREIGN KEY 约束"FK_borrow_book"冲突。该冲突发生于数据库"Library",表"dbo.book", column '图书条码'。
但是如果把insert和update语句提出来单独运行,却没有发生外键冲突,表也被成功修改了。请问这是怎么回事呢?

CREATE PROC borrow_book
@Aid CHAR(11), @Rid CHAR(11), @Bid CHAR(4)
AS 
BEGIN 
  INSERT dbo.borrow
  ( 图书条码 ,
  读者ID ,
  借书日期 ,
  还书日期 ,
  是否过期 ,
  管理员ID
  )
  VALUES ( @Bid , -- 图书条码 - char(11)
  @Rid , -- 读者ID - char(11)
  GETDATE(), -- 借书日期 - date
  DATEADD(MONTH, 2, GETDATE()), -- 还书日期 - date
  '否' , -- 是否过期 - char(2)
  @Aid -- 管理员ID - char(11)
  )
  UPDATE book
  SET 图书状态 = '借出'
  WHERE 图书条码 = @Bid
END

------解决方案--------------------
说明你插入的那个图书条码不在BOOK表
------解决方案--------------------
...
@Bid CHAR(4)
...
VALUES ( @Bid , -- 图书条码 - char(11)
...
你参数里面的char长度是4,而图书条码 - char(11)的长度是11,应该就是错在这里了。
估计它把你传的参数进行截取了。。。。。