WHILE @@fetch_status=0 
BEGIN
  IF SUBSTRING(@DANHAO,1,2)='ML'
    BEGIN
      UPDATE AA SET REM=@REM 
    END
  IF SUBSTRING(@DANHAO,1,2)='IC'
    BEGIN 
      UPDATE BB SET REM=@REM 
    END
  IF SUBSTRING(@DANHAO,1,2)='PC'
    BEGIN 
      UPDATE CC SET REM=@REM 
    END
  SET @I=@I+1
  fetch next from LOT_NO into @DANHAO,@PRD_NO,@REM
END上面的三个IF语句块截取自一个游标语句,目的是根据SUBSTRING(@DANHAO,1,2)不同而UPDATE不同的表,但上面的写法效率比较低,游标每移动一次都要进行三次判。
当然可以使用嵌套的IF...ELSE语句块,但总觉得不是最好的方法。
CASE...WHEN好像不能进行这样的判断,如果能有类似程序开发中的CASE语句功能就好了。
请教大家有没有更好的方法这,效率更高?

解决方案 »

  1.   

    帮你顶;同时你这样的处理也是对的,如果用case when打到的效果是一样的,case when主要处理的是更多个像你这样的判断,你只有三个用if足够夷;相信你自己吧!
      

  2.   

    declare @tbname varchar(50)
    set @tbname=case SUBSTRING(@DANHAO,1,2) when 'ML' then 'AA' when 'IC' then 'BB' when 'PC' then 'cc' else '其他' endWHILE @@fetch_status=0
    BEGIN
    exec('UPDATE '+@tbname+' SET REM='''+@REM+'''')
    SET @I=@I+1
      fetch next from LOT_NO into @DANHAO,@PRD_NO,@REM
    END