不使用游标,一样可以实现根据更新表的某些字段还要进行计算吗?答案是肯定的,下面就将为您介绍使用函数解决此问题的方法,供您参考。
使用SQL中的函数,也可以根据更新表的某些字段还要进行计算,下面就将为您介绍这种使用SQL中的函数替代游标的方法,供您参考,希望对您有所帮助。
- CREATEFUNCTION[DBO].[FUN_RATE](@PARTIDINT,@ENIDINT,@SOURCEIDINT,@QUALITYIDINT,@COUNTINT)
- RETURNSFLOATAS
- BEGIN
- DECLARE@QXSFLOAT,@GFLOAT,@RATEFLOAT
- IF(@ENID=NULL)OR(@PARTID=NULL)OR(@SOURCEID=NULL)OR(@QUALITYID=NULL)
- BEGIN
- RETURN(0.0)
- END
- SELECT@QXS=ISNULL(XS,0)FROMTABLEQUALITYWHEREID=@QUALITYID
- SELECT@G=ISNULL(FRATE_G,0)FROMTABLEFAILURERATE
- WHERE(SUBKINDID=@PARTID)AND(ENID=@ENID)AND(DATASOURCEID=@SOURCEID)AND(((ISNULL(MINCOUNT,0)<=ISNULL(@COUNT,0))AND(ISNULL(MAXCOUNT,0)>=ISNULL(@COUNT,0)))
- OR(ISNULL(@COUNT,0)>ISNULL(MAXCOUNT,0)))
- SET@RATE=ISNULL(@QXS*@G,0)
- RETURN(@RATE)
- END
- 调用函数的存储过程部分:
- CREATEPROCPROC_FAULTRATE
- @PARTIDINTEGER,@QUALITYIDINTEGER,@SOURCEIDINTEGER,@COUNTINTEGER,@ROIDINT,@GRADEINT,@RATEFLOAT=0OUTPUTAS
- BEGIN
- DECLARE
- @TASKIDINT
- SET@RATE=0.0
- SELECT@TASKID=ISNULL(TASKPROID,-1)FROMTABLERELATIONWHEREID=(SELECTPIDFROMTABLERELATIONWHEREID=@ROID)
- IF(@TASKID=-1)OR(@GRADE=1)BEGIN
- SET@RATE=0
- RETURN
- END
- SELECT@RATE=SUM([DBO].[FUN_RATE](@PARTID,ENID,@SOURCEID,@QUALITYID,@COUNT)*ISNULL(WORKPERCENT,0)/100.0)
- FROMTABLETASKPHASE
- WHERETASKID=@TASKID
- END
- GO
转载请说明出处
知优网 » 教您如何使用SQL中的函数替代游标(使用游标的sql语句)
知优网 » 教您如何使用SQL中的函数替代游标(使用游标的sql语句)