raiserror('没有这样的会员级别!',1,2)
用单引号不要用双引号

解决方案 »

  1.   

    CREATE PROCEDURE return_day 
    @grade smallint
    ASif @grade=1
       insert into VIP_lendinfo(return_date) values(dateadd(month,6,getdate())
    else if @grade=2
       insert into VIP_lendinfo(return_date) values(dateadd(month,3,getdate())
    else if @grade=3
       insert into VIP_lendinfo(return_date) values(dateadd(month,2,getdate())
    else if @grade=4   
       insert into VIP_lendinfo(return_date) values(dateadd(month,1,getdate())
    else
       raiserror("没有这样的会员级别!",1,2)
    go
      

  2.   

    如我做这样的模块,会这样解决:
        建立一会员级别表,不同级别对应不同还书期限,当然本张表必须建立一个界面让用户自己设定。而后每次按级别取出相应的期限,就不需再用这IF...ELSE了,且关于级别应是让用户自己维护的吧,象你这样在后台写死了,如级别1的还书期限改为7个月了,你不是还要再改这段程序吗。
      

  3.   

    to zhouhuajian:
    我确实有一张会员级别表,里面有一个还书期限字段,但这个字段只说明不同级别的会员可以享受不同的还书期限,我还有一张会员借书信息表,里面记录的是会员借书的具体情况,其中有一个借书日期和一个应还书日期字段,应还书日期字段就是根据不同等级的会员和借书日期(当天)自动算出应还书日期。
    还有关于级别,我想应该由有相关权限的用户(如系统管理员)来定吧。
      

  4.   

    set @grade=(select grade_ID from VIP_grade)这一句不对,子查询返回的值多于一个,怎能付与一个变量?你可以用修改。
    update VIP_lendinfo set return_date=(dateadd(month,6,getdate()) where grade_id=1
    update VIP_lendinfo set return_date=(dateadd(month,3,getdate()) where grade_id=2
    update VIP_lendinfo set return_date=(dateadd(month,2,getdate()) where grade_id=3
    update VIP_lendinfo set return_date=(dateadd(month,1,getdate()) where grade_id=4
      

  5.   

    SELECT   return_date = 
          CASE grade_id
             WHEN 1 THEN (dateadd(month,6,getdate())
             WHEN 2 THEN (dateadd(month,3,getdate())
             WHEN 3 THEN (dateadd(month,2,getdate())
             WHEN 4 THEN (dateadd(month,1,getdate())
             ELSE 
             raiserror("没有这样的会员级别!",1,2)
          END
      

  6.   

    呵呵,没那么复杂。只是少了N个括号...CREATE PROCEDURE return_day 
    @grade smallint
    AS
    set @grade=(select grade_ID from VIP_grade)
    begin
    if @grade=1
       insert into VIP_lendinfo(return_date) values(dateadd(month,6,getdate()))
    else if @grade=2
       insert into VIP_lendinfo(return_date) values(dateadd(month,3,getdate()))
    else if @grade=3
       insert into VIP_lendinfo(return_date) values(dateadd(month,2,getdate()))
    else if @grade=4   
       insert into VIP_lendinfo(return_date) values(dateadd(month,1,getdate()))
    else
       raiserror('没有这样的会员级别!',1,2)
    end
      

  7.   

    我上面的只是解释语法错误,至于你的逻辑错误还要看看lyyrw(咋暖还寒) 的解释。
    :)
      

  8.   

    to lyyrw:
    谢谢,我有点明白了。但是现在有个问题,我一开始就没说清楚的,其实grade_ID字段不在VIP_lendinfo表中,在另外一张“会员等级表”中。其实我有三张表——“会员表”、“会员表等级表”和“会员表借书信息表”,其中相关字段为“会员号”、“会员等级”(会员表)     “等级号”(会员表等级表)      “会员号”、“应还书日期”(会员表借书信息表),所以一定要用变量的,或者是不是可以用子查询?
      

  9.   

    to lyyrw:
    你的case...when我用了后,系统报错,是在when附近。
      

  10.   

    我重新写过了,但还是不对,问题好象是where附近,各位大虾出手相助啊。
    CREATE PROCEDURE expectdate
    AS
    begin
    update VIP_lendinfo set return_expectdate=(dateadd(month,6,getdate()) where VIP_ID in (select VIP_ID from VIP_info where VIP_grade=1)
    update VIP_lendinfo set return_expectdate=(dateadd(month,3,getdate()) where VIP_ID in (select VIP_ID from VIP_info where VIP_grade=2)
    update VIP_lendinfo set return_expectdate=(dateadd(month,2,getdate()) where VIP_ID in (select VIP_ID from VIP_info where VIP_grade=3)
    update VIP_lendinfo set return_expectdate=(dateadd(month,1,getdate()) where VIP_ID in (select VIP_ID from VIP_info where VIP_grade=4)
    end
      

  11.   

    update VIP_lendinfo set return_expectdate='('dateadd(month,6,getdate()) where VIP_ID in (select VIP_ID from VIP_info where VIP_grade=1)
    多了我加引号的半边括号。
      

  12.   

    天啊,有必要用这样的逻辑代码吗?下面的方法不行吗?
    假设有三张表:
    1、[会员等级表] 包括字段:会员级别 会员还书期限
    2、[会员表]   包括字段:会员ID  会员级别
    3、[会员借书信息表] 包括字段: 会员ID  还书日期
    存储过程可根据会员ID直接改写其还书日期:
    CREATE PROCEDURE return_day 
    @会员ID smallint
    AS
    DELCARE @还书期限 int
    SELECT @还书期限=会员还书期限 FROM [会员等级表] WHERE 会员级别=(SELECT 会员级别 FROM [会员表] WHERE 会员ID=@会员ID)
    UPDATE 会员借书信息表 SET 还书日期=dateadd(month,@还书期限,getdate())WHERE 会员ID=@会员ID
    GO