SQL中用函数代替游标的方法

数据库 SQL Server
如果要根据更新表的某些字段还要进行计算,经常会采用游标的方法,下面将为您介绍在SQL中如何使用函数代替游标,供您参考。

下面将为您介绍在SQL中如何使用函数代替游标,供您参考,希望对您学习SQL中函数的使用能够有所帮助。

因为update里不能用存储过程,然而要根据更新表的某些字段还要进行计算。我们常常采用游标的方法,这里用函数的方法实现。

CREATE FUNCTION [DBO].[FUN_GETTIME] (@TASKPHASEID INT)   
RETURNS FLOAT AS   
BEGIN   
  DECLARE @TASKID INT,  
          @HOUR FLOAT,   
          @PERCENT FLOAT,   
          @RETURN FLOAT  
  IF @TASKPHASEID IS NULL   
  BEGIN  
    RETURN(0.0)  
  END  
 
SELECT @TASKIDTASKID=TASKID,@PERCENT=ISNULL(WORKPERCENT,0)/100   
FROM TABLETASKPHASE   
WHERE ID=@TASKPHASEID  
 
SELECT @HOUR=ISNULL(TASKTIME,0) FROM TABLETASK   
WHERE ID=@TASKID  
 
SET @RETURN=@HOUR*@PERCENT  
RETURN (@RETURN)  
END  
 
调用函数的存储过程部分  
CREATE PROCEDURE [DBO].[PROC_CALCCA]  
@ROID INT  
  AS  
BEGIN  
  DECLARE @CA FLOAT  
 
  UPDATE TABLEFMECA   
  SET   
  Cvalue_M=    ISNULL(MODERATE,0)*ISNULL(FMERATE,0)*ISNULL(B.BASFAILURERATE,0)*[DBO].[FUN_GETTIME](C.ID)  
FROM TABLEFMECA ,TABLERELATION B,TABLETASKPHASE C  
WHERE ROID=@ROID AND TASKPHASEID=C.ID AND B.ID=@ROID  
 
  SELECT @CA=SUM(ISNULL(Cvalue_M,0)) FROM TABLEFMECA WHERE ROID=@ROID  
 
UPDATE TABLERELATION   
  SET CRITICALITY=@CA  
  WHERE ID=@ROID  
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.

 

 

 

【编辑推荐】

SQL中CHARINDEX函数的调用方法

SQL中的分析函数

创建SQL函数的实例

SQL中一个很好用的日期格式化函数

SQL中返回计算表达式的函数

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

2010-09-08 09:11:42

SQL游标语法

2010-07-14 15:32:28

SQL Server

2010-07-01 14:36:34

SQL Server动

2010-07-26 10:59:59

SQL Server游

2010-04-21 15:02:50

Oracle使用游标

2010-04-21 15:10:35

Oracle游标

2022-05-11 15:06:02

MySQL游标SQL

2010-05-26 16:41:09

MySQL 游标

2010-05-07 12:07:08

Oracle 多层游标

2010-05-31 17:06:35

MySQL游标

2010-05-06 11:02:26

Oracle游标

2010-11-12 10:31:25

SQL Server游

2010-09-09 16:40:58

SQL循环游标

2010-10-09 16:41:54

MYSQL存储过程

2010-09-10 16:24:06

SQL函数

2010-09-01 15:09:41

DB2动态游标

2011-04-15 13:12:08

DB2游标

2010-04-21 15:52:45

Oracle游标

2011-08-22 14:00:13

SQL Server 游标调用函数

2010-05-04 09:14:11

Oracle数据库
点赞
收藏

51CTO技术栈公众号