教您如何使用SQL中的函数替代游标

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

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

CREATE FUNCTION [DBO].[FUN_RATE] (@PARTID INT,@ENID INT,@SOURCEID INT, @QUALITYID INT,@COUNT INT)  
 
RETURNS FLOAT AS   
BEGIN   
  DECLARE @QXS FLOAT, @G FLOAT, @RATE FLOAT  
 
  IF (@ENID=NULL) OR (@PARTID=NULL) OR (@SOURCEID=NULL) OR (@QUALITYID=NULL)  
  BEGIN  
    RETURN(0.0)  
  END  
 
  SELECT @QXSISNULL(XS,0) FROM TABLEQUALITY WHERE ID=@QUALITYID  
  SELECT @G=ISNULL(FRATE_G,0) FROM TABLEFAILURERATE  
  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  
 
调用函数的存储过程部分:  
 
CREATE PROC PROC_FAULTRATE  
 
@PARTID INTEGER, @QUALITYID INTEGER, @SOURCEID INTEGER, @COUNT INTEGER, @ROID INT, @GRADE INT,@RATE FLOAT=0 OUTPUTAS  
BEGIN  
  DECLARE   
    @TASKID INT   
    SET @RATE=0.0  
 
SELECT @TASKID=ISNULL(TASKPROID,-1) FROM TABLERELATION WHERE ID=(SELECT PID FROM TABLERELATION WHERE ID=@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)  
 
    FROM TABLETASKPHASE   
    WHERE TASKID=@TASKID  
END  
GO  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

 

责任编辑:段燃 来源: 互联网
相关推荐

2010-10-21 14:06:22

定义SQL Serve

2010-09-09 09:59:37

SQL函数TRUNC

2010-09-26 13:51:48

SQL游标

2010-09-24 16:52:18

sql DATENAM

2010-09-07 15:54:47

SQL语句LIKE

2010-10-21 16:59:37

SQL Server创

2010-10-21 16:59:37

SQL Server创

2010-10-11 15:28:14

MySQL group

2010-09-25 11:02:33

SQL主键

2010-09-07 10:42:12

SQL语句

2010-09-26 13:56:43

SQL远程查询

2010-09-03 14:14:16

SQL删除

2010-09-24 15:58:24

SQL语句逐条更新

2010-09-27 16:48:07

sql server时

2010-09-25 09:34:05

sql server主

2010-10-13 15:59:21

MySQL索引

2010-10-19 16:58:34

SQL Server日

2010-09-24 18:47:23

SQL数据分页

2010-09-16 15:48:03

SQL Server系

2010-09-09 10:32:24

SQL函数拼音
点赞
收藏

51CTO技术栈公众号