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

对MS SQL Server函数的两种实际用法的分析

a8116255316年前 (2010-07-08)系统运维9

以下的文章主要向大家描述的是分析MS SQL Server函数的两种正确用法,在实际操作中SQL Server数据库里函数的主要有两种用法(可以代替游标),以下就是具体方案的描述,希望在你今后的学习中会有所帮助。

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

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/21599.html

分享给朋友:

“对MS SQL Server函数的两种实际用法的分析” 的相关文章

windows 7/8.1正在启动windows时间长的解决方法

windows 7/8.1正在启动windows时间长的解决方法

正在启动windows时间长怎么办 小编带来了Windows 7/8.1正在启动windows时间长解决方法,假如有朋友在安装完Windows系统之后一直停留在“正在启动windows”的话,不妨试一试下文的方法哦~ 原因:Windows 7/8.1不完全支持UEFI,需要CSM(Comp...

windows 7系统的电脑发出嘟嘟嘟的声音该怎么解决?

windows 7系统的电脑发出嘟嘟嘟的声音该怎么解决?

在某些电脑中,机器内部蜂鸣器与系统的声音输出方案是相关联的,这样一来会导致当系统输出声音时,即使电脑没有连接外部音响或耳机,也会通过内置蜂鸣器发出“嘟嘟哔哔”的声音。这个问题主要出现在Windows 7电脑中,假如你的电脑恰好遇到了这样的问题,可参考下面的方法来解决: 1、在桌面“计算机”图标上右...

上帝不止一个 更多Windows7 快捷模式.

上帝不止一个 更多Windows7 快捷模式.

国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

故障现象: Windows 7酷狗软件无声音,系统声音正常。 原因分析: 1. 查看酷狗软件设置 2. 查看系统设置 解决方案: 1. Windows 7操作方法 如图:查看是否处于禁音状态   Windows 7系统声音正常酷狗音乐无声音 2. 查看设置音频输出是否...

Windows7截图出现黑屏导致截的图黑呼呼一片

Windows7截图出现黑屏导致截的图黑呼呼一片

最近一些Windows 7用户反馈说,自己在截屏的时候出现黑屏,导致自己截的图黑呼呼一片。这个问题该怎么解决?今天小编就为大家提供一个解决的方法。 步骤 1 在windows xp时代,很多用户都曾被视频截图后的“全黑图片”困扰。对此,在解决本地播放时出现的截图变黑问题,一般有两个方法可以用来解...

windows7系统下让所有文件夹都使用同一种视图的方法

windows7系统下让所有文件夹都使用同一种视图的方法

Windows 7系统可以对每个文件夹进行个性化视图设置,可以根据自己的个人喜好和实际需要更改文件或文件夹图标的大小,或者让文件或文件夹以列表、平铺等方式显示。但是,假如你对N个文件夹视图进行了风格各异的个性设置,现在又想让所有文件夹都使用同一种视图怎么办呢 手工一个一个修改,你OUT了,非累得手抽...