SET @V_TMP_SQL_CUR='FETCH NEXT FROM CUR_SCR_SGMNT_'+@V_BTCH_EXAM_ID+' into @V_SGMNT_ID,@LWR_SCR,@LWR_CNDTN,@LMT_SCR,@LMT_CNDTN,@V_SGMNT_NM '
PRINT @V_TMP_SQL_CUR
EXEC sp_executesql @V_TMP_SQL_CUR,N'@V_SGMNT_ID NVARCHAR(40),@LWR_SCR DECIMAL(10,2),@LWR_CNDTN NVARCHAR(40),@LMT_SCR DECIMAL(10,2),@LMT_CNDTN NVARCHAR(40),@V_SGMNT_NM NVARCHAR(100) OUT',@V_SGMNT_ID,@LWR_SCR,@LWR_CNDTN,@LMT_SCR,@LMT_CNDTN,@V_SGMNT_NM OUTPUT
SET @k = @k+1;
PRINT '打印:@V_SGMNT_ID ='+@V_SGMNT_ID
PRINT @V_SQL_STR
    IF (@k = 1)
 BEGIN             
SET @V_SQL_STR = @V_SQL_STR+'( CASE  '
SET @V_SQL_SGMNT_NM = @V_SQL_SGMNT_NM+'( CASE '
 END
     
PRINT 'k'+CAST(@k AS VARCHAR(10))+'>>>>>>@V_SQL_STR='+ISNULL(@V_SQL_STR,'NULL')
PRINT 'k'+CAST(@k AS VARCHAR(10))+'>>>>>>@V_SQL_SGMNT_NM='++ISNULL(@V_SQL_STR,'NULL')
……
循环过程中发现,fetch输出的结果,只有数据最有一个字段有值,其余均为null
FETCH NEXT FROM CUR_SCR_SGMNT_20111208140702884 into @V_SGMNT_ID,@LWR_SCR,@LWR_CNDTN,@LMT_SCR,@LMT_CNDTN,@V_SGMNT_NM 
打印:@V_SGMNT_ID =
CASE WHEN SUB_ID = 1 THEN k1>>>>>>@V_SQL_STR=CASE WHEN SUB_ID = 1 THEN 
( CASE  
k1>>>>>>@V_SQL_SGMNT_NM=CASE WHEN SUB_ID = 1 THEN 
( CASE  
@V_SGMNT_ID =
@LWR_CNDTN =
@LMT_CNDTN =
@V_SGMNT_NM =B
Sql Server 新手,还请大家指导!

解决方案 »

  1.   

    游标是用来拼SQL的,用它自然有它的道理,不是所有的用了游标的SP效率就一定低的吧?我这里用游标就是为了提升效率。
      

  2.   

    你说对了,所有的用了游标的存储过程(注意,不是你说的SP,SP是指system  procedure,是系统存储过程),效率都低.这是不容置疑的.
    游标用循环将查得的数据一个个赋给变量,再由变量来处理,而在绝大多数程序语句中,赋值语句是速度最慢的.因此,游标的效率和速度,你知道的!