不使用游标,一样可以实现根据更新表的某些字段还要进行计算吗?答案是肯定的,下面就将为您介绍使用函数解决此问题的方法,供您参考。

使用SQL中的函数,也可以根据更新表的某些字段还要进行计算,下面就将为您介绍这种使用SQL中的函数替代游标的方法,供您参考,希望对您有所帮助。

教您如何使用SQL中的函数替代游标(使用游标的sql语句)  SQL 函数 第1张

  1. CREATEFUNCTION[DBO].[FUN_RATE](@PARTIDINT,@ENIDINT,@SOURCEIDINT,@QUALITYIDINT,@COUNTINT)
  2. RETURNSFLOATAS
  3. BEGIN
  4. DECLARE@QXSFLOAT,@GFLOAT,@RATEFLOAT
  5. IF(@ENID=NULL)OR(@PARTID=NULL)OR(@SOURCEID=NULL)OR(@QUALITYID=NULL)
  6. BEGIN
  7. RETURN(0.0)
  8. END
  9. SELECT@QXS=ISNULL(XS,0)FROMTABLEQUALITYWHEREID=@QUALITYID
  10. SELECT@G=ISNULL(FRATE_G,0)FROMTABLEFAILURERATE
  11. WHERE(SUBKINDID=@PARTID)AND(ENID=@ENID)AND(DATASOURCEID=@SOURCEID)AND(((ISNULL(MINCOUNT,0)<=ISNULL(@COUNT,0))AND(ISNULL(MAXCOUNT,0)>=ISNULL(@COUNT,0)))
  12. OR(ISNULL(@COUNT,0)>ISNULL(MAXCOUNT,0)))
  13. SET@RATE=ISNULL(@QXS*@G,0)
  14. RETURN(@RATE)
  15. END
  16. 调用函数的存储过程部分:
  17. CREATEPROCPROC_FAULTRATE
  18. @PARTIDINTEGER,@QUALITYIDINTEGER,@SOURCEIDINTEGER,@COUNTINTEGER,@ROIDINT,@GRADEINT,@RATEFLOAT=0OUTPUTAS
  19. BEGIN
  20. DECLARE
  21. @TASKIDINT
  22. SET@RATE=0.0
  23. SELECT@TASKID=ISNULL(TASKPROID,-1)FROMTABLERELATIONWHEREID=(SELECTPIDFROMTABLERELATIONWHEREID=@ROID)
  24. IF(@TASKID=-1)OR(@GRADE=1)BEGIN
  25. SET@RATE=0
  26. RETURN
  27. END
  28. SELECT@RATE=SUM([DBO].[FUN_RATE](@PARTID,ENID,@SOURCEID,@QUALITYID,@COUNT)*ISNULL(WORKPERCENT,0)/100.0)
  29. FROMTABLETASKPHASE
  30. WHERETASKID=@TASKID
  31. END
  32. GO

转载请说明出处
知优网 » 教您如何使用SQL中的函数替代游标(使用游标的sql语句)

发表评论

您需要后才能发表评论