知识大全 SQL Server里函数的两种用法(可以代替游标)

Posted 函数

篇首语:家资是何物,积帙列梁梠。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL Server里函数的两种用法(可以代替游标)相关的知识,希望对你有一定的参考价值。

SQL Server里函数的两种用法(可以代替游标)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   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( )

  END

  SELECT @TASKID=TASKID @PERCENT=ISNULL(WORKPERCENT )/

  FROM TABLETASKPHASE

  WHERE ID=@TASKPHASEID

  SELECT @HOUR=ISNULL(TASKTIME ) 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 )*ISNULL(FMERATE )*ISNULL(B BASFAILURERATE )*[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 )) FROM TABLEFMECA WHERE ROID=@ROID

  UPDATE TABLERELATION

  SET CRITICALITY=@CA

  WHERE ID=@ROID

  END

  GO

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

  SUM ( [ ALL | DISTINCT ] expression )

  expression

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

  函数部分

  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( )

  END

  SELECT @QXS= ISNULL(XS ) FROM TABLEQUALITY WHERE ID=@QUALITYID

  SELECT @G=ISNULL(FRATE_G ) FROM TABLEFAILURERATE

  WHERE (SUBKINDID=@PARTID) AND( ENID=@ENID) AND ( DATASOURCEID=@SOURCEID) AND( ( (ISNULL(MINCOUNT )<=ISNULL(@COUNT )) AND ( ISNULL(MAXCOUNT )>=ISNULL(@COUNT )))

  OR(ISNULL(@COUNT )>ISNULL(MAXCOUNT )))

  SET @RATE=ISNULL(@QXS*@G )

  RETURN (@RATE)

  END

  调用函数的存储过程部分

  CREATE PROC PROC_FAULTRATE

  @PARTID INTEGER @QUALITYID INTEGER @SOURCEID INTEGER @COUNT INTEGER @ROID INT @GRADE INT @RATE FLOAT= OUTPUTAS

  BEGIN

  DECLARE

  @TASKID INT

  SET @RATE=

  SELECT @TASKID=ISNULL(TASKPROID ) FROM TABLERELATION WHERE ID=(SELECT PID FROM TABLERELATION WHERE ID=@ROID)

  IF (@TASKID= ) OR(@GRADE= ) BEGIN

  SET @RATE=

  RETURN

  END

  SELECT @RATE=SUM([DBO] [FUN_RATE] (@PARTID ENID @SOURCEID @QUALITYID @COUNT) *ISNULL(WORKPERCENT )/ )

  FROM TABLETASKPHASE

  WHERE TASKID=@TASKID

  END

  GO

cha138/Article/program/SQLServer/201311/22538

相关参考

知识大全 SQL Server时间函数用法详解

SQLServer时间函数用法详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQL中的时间

知识大全 java中super的两种用法

  通过用static来定义方法或成员为我们编程提供了某种便利从某种程度上可以说它类似于C语言中的全局函数和全局变量  但是并不是说有了这种便利你便可以随处使用如果那样的话你便需要认真考虑一下自己是否

知识大全 SQL SERVER其它函数

SQLSERVER其它函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本篇文章还是学习《程序

知识大全 SQL Server基本函数

数据库人员手边系列:SQLServer基本函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  字

知识大全 SQL Server 7.0 函数及SQL语句相关问题

SQLServer7.0函数及SQL语句相关问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 使用 SQL Server创建语言辅助函数

使用SQLServer创建语言辅助函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在现在这样

知识大全 Sql Server 2005自定义Split函数

SqlServer2005自定义Split函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要

知识大全 如何模拟SQL Server的两个日期处理函数

如何模拟SQLServer的两个日期处理函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //

知识大全 SQL Server和Oracle的常用函数对比

SQLServer和Oracle的常用函数对比  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 在SQL Server数据库中拆分字符串函数

在SQLServer数据库中拆分字符串函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQL