讲解SQL Server数据库中函数的使用方法
创始人
2024-07-25 21:01:09
0

导读:本文主要主要讲解了SQL Server数据库中函数的两种用法,具体内容请参考下文:

  1. 由于update里不能用存储过程,并且由于根据更新表的某些字段还要进行计算。所以很多人采用的是游标的方法,在这里我们可以用函数的方法实现。

  函数部分:

  1.  CREATE FUNCTION [DBO].[FUN_GETTIME] (@TASKPHASEID INT)  
  2.   RETURNS FLOAT AS 
  3.   BEGIN 
  4.   DECLARE @TASKID INT,  
  5.   @HOUR FLOAT,  
  6.   @PERCENT FLOAT,  
  7.   @RETURN FLOAT 
  8.   IF @TASKPHASEID IS NULL 
  9.   BEGIN 
  10.   RETURN(0.0)  
  11.   END 
  12.   SELECT @TASKID=TASKID,@PERCENT=ISNULL(WORKPERCENT,0)/100  
  13.   FROM TABLETASKPHASE  
  14.   WHERE ID=@TASKPHASEID  
  15.   SELECT @HOUR=ISNULL(TASKTIME,0) FROM TABLETASK  
  16.   WHERE ID=@TASKID  
  17.   SET @RETURN=@HOUR*@PERCENT  
  18.   RETURN (@RETURN)  
  19.   END 

   调用函数的存储过程部分:

  1. CREATE PROCEDURE [DBO].[PROC_CALCCA]  
  2.   @ROID INT 
  3.   AS 
  4.   BEGIN 
  5.   DECLARE @CA FLOAT 
  6.   UPDATE TABLEFMECA  
  7.   SET 
  8.   Cvalue_M= ISNULL(MODERATE,0)*ISNULL 
  9.   (FMERATE,0)*ISNULL(B.BASFAILURERATE,0)*[DBO].[FUN_GETTIME](C.ID)  
  10.   FROM TABLEFMECA ,TABLERELATION B,TABLETASKPHASE C  
  11.   WHERE ROID=@ROID AND TASKPHASEID=C.ID AND B.ID=@ROID  
  12.   SELECT @CA=SUM(ISNULL(Cvalue_M,0)) FROM TABLEFMECA WHERE ROID=@ROID  
  13.   UPDATE TABLERELATION  
  14.   SET CRITICALITY=@CA  
  15.   WHERE ID=@ROID  
  16.   END 
  17.   GO  


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

  SUM ( [ ALL DISTINCT ] eXPression )
  expression

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

  函数部分:

  1.  CREATE FUNCTION [DBO].[FUN_RATE] (@PARTID INT,  
  2.   @ENID INT,@SOURCEID INT, @QUALITYID INT,@COUNT INT)  
  3.   RETURNS FLOAT AS 
  4.   BEGIN 
  5.   DECLARE @QXS FLOAT, @G FLOAT, @RATE FLOAT 
  6.   IF (@ENID=NULL) OR (@PARTID=NULL) OR (@SOURCEID=NULL) OR (@QUALITYID=NULL)  
  7.   BEGIN 
  8.   RETURN(0.0)  
  9.   END 
  10.   SELECT @QXS= ISNULL(XS,0) FROM TABLEQUALITY WHERE ID=@QUALITYID  
  11.   SELECT @G=ISNULL(FRATE_G,0) FROM TABLEFAILURERATE  
  12.   WHERE (SUBKINDID=@PARTID)  
  13.   AND( ENID=@ENID)  
  14.   AND ( DATASOURCEID=@SOURCEID)  
  15.   AND( ( (ISNULL(MINCOUNT,0)<=ISNULL(@COUNT,0))  
  16.   AND ( ISNULL(MAXCOUNT,0)>=ISNULL(@COUNT,0)))  
  17.   OR(ISNULL(@COUNT,0)>ISNULL(MAXCOUNT,0)))  
  18.   SET @RATE=ISNULL(@QXS*@G,0)  
  19.   RETURN (@RATE)  
  20.   END 

   调用函数的存储过程部分:

  1.  CREATE PROC PROC_FAULTRATE  
  2.   @PARTID INTEGER, @QUALITYID INTEGER,@SOURCEID INTEGER,  
  3.   @COUNT INTEGER, @ROID INT, @GRADE INT,@RATE FLOAT=0 OUTPUTAS  
  4.   BEGIN 
  5.   DECLARE 
  6.   @TASKID INT 
  7.   SET @RATE=0.0  
  8.   SELECT @TASKID=ISNULL(TASKPROID,-1) FROM TABLERELATION  
  9.   WHERE ID=(SELECT PID FROM TABLERELATION WHERE ID=@ROID)  
  10.   IF (@TASKID=-1) OR(@GRADE=1) BEGIN 
  11.   SET @RATE=0  
  12.   RETURN 
  13.   END 
  14.   SELECT @RATE=SUM([DBO].[FUN_RATE]  
  15.   (@PARTID,ENID,@SOURCEID, @QUALITYID,@COUNT) *ISNULL(WORKPERCENT,0)/100.0)  
  16.   FROM TABLETASKPHASE  
  17.   WHERE TASKID=@TASKID  
  18.   END 
  19.   GO  


 本文就为大家总结出了这两种SQL Server数据库函数使用方法,如果大家有更多更好的方法,欢迎拿出来与大家一起分享。

【编辑推荐】

  1. SQL Server的函数库漏洞
  2. Oracle中over函数的使用示例
  3. Oracle单行日期函数简介
  4. SQL Server数据库中对图片进行保存和输出

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...