科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道分析 SQL Server里函数的两种用法(1)

分析 SQL Server里函数的两种用法(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SQL Server里函数的两种用法与些同时这两种用法可以代替游标。

作者:tech.ddvip.com 来源:tech.ddvip.com 2007年9月1日

关键字: SQL Server SQL Server 各版本 函数 数据库

  • 评论
  • 分享微博
  • 分享邮件

SQL Server里函数的两种用法与些同时这两种用法可以代替游标。

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

函数部分:

以下是引用片段:

  CREATEFUNCTION[DBO].[FUN_GETTIME](@TASKPHASEIDINT)
  RETURNSFLOATAS
  BEGIN
  DECLARE@TASKIDINT,
  @HOURFLOAT,
  @PERCENTFLOAT,
  @RETURNFLOAT
  IF@TASKPHASEIDISNULL
  BEGIN
  RETURN(0.0)
  END
  SELECT@TASKID=TASKID,@PERCENT=ISNULL(WORKPERCENT,0)/100
  FROMTABLETASKPHASE
  WHEREID=@TASKPHASEID
  SELECT@HOUR=ISNULL(TASKTIME,0)FROMTABLETASK
  WHEREID=@TASKID
  SET@RETURN=@HOUR*@PERCENT
  RETURN(@RETURN)
  END

调用函数的存储过程部分

以下是引用片段:

  CREATEPROCEDURE[DBO].[PROC_CALCCA]
  @ROIDINT
  AS
  BEGIN
  DECLARE@CAFLOAT
  UPDATETABLEFMECA
  SET
  Cvalue_M=ISNULL(MODERATE,0)*ISNULL(FMERATE,0)*
    ISNULL(B.BASFAILURERATE,0)*[DBO].[FUN_GETTIME](C.ID)
  FROMTABLEFMECA,TABLERELATIONB,TABLETASKPHASEC
  WHEREROID=@ROIDANDTASKPHASEID=C.IDANDB.ID=@ROID
  SELECT@CA=SUM(ISNULL(Cvalue_M,0))FROMTABLEFMECAWHEREROID=@ROID
  UPDATETABLERELATION
  SETCRITICALITY=@CA
  WHEREID=@ROID
  END
  GO

2. 我们要根据某表的某些记录,先计算后求和,因为无法存储中间值,平时我们也用游标的方法进行计算。但SQL Server2000里支持:

SUM ( [ ALL | DISTINCT ] expression )

expression是常量、列或函数,或者是算术、按位与字符串等运算符的任意组合。因此我们可以利用这一功能。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章