SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Proc_OrderAdd] 
(
     @UserID   [varchar](50),  
 @BookID   [int],
 @OrderBeginDate  [datetime],
 @OrderEndDate  [datetime],
 @info  [int] output
 )
AS
BEGIN
if exists(select * from Book where BookID=@BookID)
          begin
                if exists(select * from Order where UserID=@UserID and BookID=@BookID and Orderstate=2)
                    set @info=1
                else
                 begin
                     if((select (BookTotalNum-Loanedcount) from Book where BookID=@BookID )<1)
                          set @info=2
                      else
                        begin
insert into Order(UserID,BookID,OrderBeginDate,OrderEndDate)
 values (@UserID,@BookID,@OrderBeginDate,@OrderEndDate)

update Book set Loanedcount=Loanedcount+1 where BookID=@BookID
                             
set @info=3;
end
     end
           end
  else
      set @info=4
END
那位大神能够帮忙解决一下不胜感激!

解决方案 »

  1.   

    order是关键字,你拿来当表名的话,要加上方括号
    if exists(select * from [Order] where UserID=@UserID and BookID=@BookID and Orderstate=2)
    其它地方也检查一下有没有加上
      

  2.   

    if exists(select * from Order where UserID=@UserID and BookID=@BookID and Orderstate=2)
    这句修改为:
    if exists(select * from [Order] where UserID=@UserID and BookID=@BookID and Orderstate=2)
      

  3.   

    又是数据库保留字order惹的祸
    如果数据库字段你使用了数据库中的保留字,请使用[]将其包裹起来,以示区别
      

  4.   

    oracle  'order'sql  [order]
      

  5.   

    insert into Order(UserID,BookID,OrderBeginDate,OrderEndDate)
    Order关键字
      

  6.   

    [order]  关键字 用[]括起来