请问当 Rs("评分项目")="导游等级"  时
 DaoYou_Info 中 导游等级=Rs("评分条件") 的记录是不是确保只有一条,还是有很多条
其它类似?

解决方案 »

  1.   

    说明:表1:TableA,表2:TableB
    TableA字段:评分项目,评分条件,评分标准
    如“学历”为评分项目,评分条件有小学,初中等多个,评分标准为:小学1 分,初中2分等
    TableA在初始时就会设置好,但可以修改;
    TableB字段:姓名,学历加分等
    当初始添加TableB数据时,学历加分从TableA取评分标准;
    问题:现假设TableA中有多个评分标准,TableB中也有多条数据,每条数据都有可能是不同的学历,当TableA中的评分标准改变时,相应的要对TableB中的学历加分进行更新;
    我就是想修改表1完成后批量对表2进行更新(不是同步更新)的存储过程!
      

  2.   

    >> zjcxc:代码看得头晕暴寒~~
      

  3.   

    用存储过程游标。。请参考cursor
    游标循环就好像程序循环一样。用两级游标循环就可以实现
      

  4.   

    create proc <dbo>.<过程名>
    as
    declare @cItem varchar(50)/*对应评分项目*/, @cCondition varchar(50)/*对应评分条件*/ 
    declare @nNumFen /*对应加分*/ int , @bFlag bit ,@nX int
    declare @nID int , @cCarID varchar(20), @nlimit_date int  --自己对应什么类型自己去调定set @bFlag = 0  --初始化
    begin trancreate diaoyouCursor /*游标名*/ scroll Cursor for   --建立游标
            SELECT 评分项目, 评分条件,加分 
            FROM DaoYou_PingFenBiaoZhun 
            WHERE (评分项目 IN ('导游等级', '导游学历','服务年限'))open diaoyouCursorwhile ( 0 = 0 )
    begin
          fetch next from diaoyouCursor into   @cItem ,  @cCondition  , @nNumFen  --每条记录写入对应变量
          if (@@Fetch_Status <> 0 ) break   --无记录时退出循环
          
          if ( @cItem = '导游等级' )
          begin
                 Update DaoYou_Info Set 等级分 = @nNumFen  Where 导游等级 = @cCondition        end
          else 
          begin
              if ( @cItem ='导游学历' )
              begin
                   Update DaoYou_Info Set 学历分 = @nNumFen   Where 学历 = @cCondition            end
              else
              begin
                    if ( @cItem = '服务年限' ) set @bFlag = 1  --避免嵌套太长
              end
          end      if ( @bFlag = 1 )
          Begin
               Create twoCursorName Scroll Cursor for
                       SELECT ID,导游发证, 年限分 
                       FROM DaoYou_Info
               open twoCursorName 
               while (0 = 0 )
               begin
                    fetch next from diaoyouCursor into   @nID ,  @cCardID  , @nLimit_date  
                    --每条记录写入对应变量
                    if (@@Fetch_Status <> 0 ) break   --无记录时退出循环
                    
                     set @nX = DATEDIFF(yy , @cCardID  , getdate() )
                     -- response.write nx 我就不知怎样处理了.还是把@nX 写入一个表或零时表再查询.我就不写了
                    Update DaoYou_Info Set 年限分 = @nX  Where ID = @nID            end            close twoCursorName
                Deallocate twoCursorName --释放
                     
          endend close diaoyouCursor
     Deallocate diaoyouCursor --释放 UPDATE DaoYou_Info SET 初始分值 = 等级分 + 年限分 + 学历分 + 100 commit tran
    return
    ERROR_EXIT:
    rollback tran
    return
          
          
      

  5.   

    有个错误就是第二个fetch next from diaoyouCursor into   @nID ,  @cCardID  , @nLimit_date  
    复制时忘记改了
      

  6.   

    SELECT 评分项目, 评分条件,加分 
            FROM DaoYou_PingFenBiaoZhun 
            WHERE (评分项目 IN ('导游等级', '导游学历','服务年限'))
    这句话会有重复记录是不是最多只有三条记录
      

  7.   

    这个应该可以满足你的要求update a set 
    等级分=isnull(b.加分,a.等级分),
    学历分=isnull(c.加分,a.学历分),
    年限分=isnull(DATEDIFF(yy ,a.导游发证,getdate()),a.年限分)
    from DaoYou_Info a 
    left join DaoYou_PingFenBiaoZhun b on a.导游等级=b.评分条件 and b.评分项目='导游等级'
    left join DaoYou_PingFenBiaoZhun c on a.学历=c.评分条件 and c.评分项目='学历'
    left join DaoYou_PingFenBiaoZhun d on a.学历=d.评分条件 and d.评分项目='服务年限'