采用SQL2000数据库
stuMarks表中writtenExam有2条记录:
  ID    writtenExam
  1         80
  2         30
执行以下语句:
IF exists (select * from stuMarks where writtenExam >60)
 BEGIN
    print '笔试成绩高于60分,每人+10分,加分后的成绩为:'
    update stuMarks set writtenExam=writtenExam +10
    select * from stuMarks
 END
ELSE
 BEGIN
    print '笔试成绩太低需要+30分,加分后的成绩为'
     update stuMarks set writtenExam=writtenExam +30
     select * from stuMarks
 ENDGO为什么ELSE部分没有执行?反而是都加10 最后stuMarks显示为:  ID    writtenExam
  1         90
  2         40请问错在哪里?好象EXISTS根本没有执行检查

解决方案 »

  1.   

    只要你的数据有一个是>60,就执行if 不执行ELSE
      

  2.   

    IF exists (select * from stuMarks where writtenExam >60) 
    BEGIN 
        print '笔试成绩高于60分,每人+10分,加分后的成绩为:' 
        update stuMarks set writtenExam=writtenExam +10 
        select * from stuMarks 
    END 
    ELSE IF exists (select * from stuMarks where writtenExam <=60)
    BEGIN 
        print '笔试成绩太低需要+30分,加分后的成绩为' 
        update stuMarks set writtenExam=writtenExam +30 
        select * from stuMarks 
    END GO 
      

  3.   

    IF exists (select * from stuMarks where writtenExam >60) 
    BEGIN 
        print '笔试成绩高于60分,每人+10分,加分后的成绩为:' 
        update stuMarks set writtenExam=writtenExam +10 
        select * from stuMarks 
    END 
    IF exists (select * from stuMarks where writtenExam <=60)
    BEGIN 
        print '笔试成绩太低需要+30分,加分后的成绩为' 
        update stuMarks set writtenExam=writtenExam +30 
        select * from stuMarks 
    END GO 多了一个else
      

  4.   


    UPDATE stuMarks SET 
        writtenExam=writtenExam+CASE WHEN writtenExam>60 THEN 10 ELSE 30 END
      

  5.   


    --用不着写if else
    update stuMarks SET writtenExam=writtenExam+(CASE WHEN writtenExam>60 THEN 10 ELSE 30 END)
    GO 
      

  6.   

    update也要加条件呀,if只决定你执行那条语句,不是决定你执行那些记录。
      

  7.   

    declare @t table(id int,writtenExam int)
    insert @t select 1,80
    union all select 2,30select * from @t
    /*(2 行受影响)
    id          writtenExam
    ----------- -----------
    1           80
    2           30(2 行受影响)
    */update @t
    set writtenExam=writtenExam+
    (case when writtenExam>60 then 10 else 30 end)select * from @t
    /*
    (2 行受影响)id          writtenExam
    ----------- -----------
    1           90
    2           60(2 行受影响)
    */
      

  8.   

    exists 是存在的意思      !!!~~~~~~~~~~
      

  9.   

    else  的条件是以上都不符合才会进入那里面