当前位置:首页 > 系统运维 > 正文内容

正确分析MS SQL Server函数的2种用法

a8116255316年前 (2010-07-20)系统运维6

下面的文章主要介绍的是正确分析MS SQL Server函数的2种用法,在实际操作中SQL Server数据库里函数具体的有2种用法(可以代替游标),以下的文章就是对其具体操作方案的描述,以下就是文章的主要内容讲述。

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

函数部分:

以下是引用片段:

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 

调用MS SQL Server函数的存储过程部分

以下是引用片段:

CREATE PROCEDURE [DBO].[PROC_CALCCA]   @ROID INT   AS   BEGIN   DECLARE @CA FLOAT   UPDATE TABLEFMECA   SET   Cvalue_MISNULL(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 

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

SUM ( [ ALL | DIstINCT ] expression )  expression  

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

函数部分:

以下是引用片段:

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 

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

以下是引用片段:

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 

函数还可以返回表等,希望大家一起讨论sqlserver里MS SQL Server函数的妙用。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/22126.html

分享给朋友:

“正确分析MS SQL Server函数的2种用法” 的相关文章

如何删除自带的不常用应用为windows 7减负

如何删除自带的不常用应用为windows 7减负

对于Windows 7系统来说,其默认安装的许多工具是我们很少使用或从来不用的,比如系统自带的扫雷、纸牌游戏等。删除此类长期不用的系统组件,不但可以让系统更清爽,更重要的是还可以提高系统的运行速度,特别是对于硬件配置相对较低的上网本来说,尤其如此。接下来,笔者就给大家介绍一下如何删除Windows...

windows 7系统重装后卡在正在启动Windows开机界面怎么办

windows 7系统重装后卡在正在启动Windows开机界面怎么办

重装系统是我们面对许多电脑问题时的终极方法,不过重装系统也不意味着就能将全部的问题都修复。一些用户在重装系统后开机时,电脑卡在“正在启动Windows”开机界面上了,这要怎么解决呢? Windows 7系统重装后卡在开机界面的解决方法: 一、首先可以看看该故障出现的原因是否是因为启动了acp...

windows 7系统怎么取消禁ping命令?

windows 7系统怎么取消禁ping命令?

当我在虚拟机的linux系统中ping本机的ip发现ping不通,而本机可以ping通虚拟机中的ip。应该是出于安全考虑吧,Windows 7默认在防火墙里禁止了。 1、查看主机ip 打开“开始”程序中的“附件”,找到“命令提示符”打开。输入命令:ipconfig,可以看到本机的ip是192.1...

windows 7玩网游PING高即网络延时比较高的解决方法

windows 7玩网游PING高即网络延时比较高的解决方法

经常听见有人说用Windows 7玩网络游戏的时候网络延时比较高,也就是ping比平时xp的时候高一点,一直找不到原因,很苦恼。今天我们终于找到理由了,原来是Windows 7的一个服务在作怪,这个服务叫:Multimedia Class Scheduler,就是这个服务让我的PING如此高,问题是...

微软为windows 7用户重新发布补丁KB2952664 帮助提升Win10升级体

微软为windows 7用户重新发布补丁KB2952664 帮助提升Win10升级体

1月13日消息,微软今天为Windows 7(SP1)用户重新推送了编号为KB2952664的更新补丁,该更新在官方KB知识库中的描述为“Windows 7系统升级兼容性更新”,用于帮助微软改进当前版本系统,提升升级到最新版Win10系统的体验。 这项更新还用于在系统中显示Windows10更新提...

windows 7系统中不能把程序锁定到任务栏的解决方法图文讲解

windows 7系统中不能把程序锁定到任务栏的解决方法图文讲解

最近小编在使用Windows 7的时侯遇到一个问题,就是应用程序和快捷方式不能锁定到任务栏,我当时不知道怎么回事,但是很多现有的方法都不能解决这个问题。现在我把我的解决的方法分享给大家以作参考。 问题分析 经过思考,初步判断出现该问题的原因是由于使用第三方优化软件消除快捷方式的小箭头引起的。...