网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.MS SQLSERVER中如何快速获取表的.
.通过作业调度建立SQL Server的自.
..NET 2.0 SqlDependency快速上手.
.讲解使用SQL Server升级顾问的详.
.关于SQL SERVER 日志满的处理方法.
.SQL语句应当如何使用内嵌视图与临.
.调查表明开源软件的维护与支持问.
.使用特殊数据.
.DBA必须具备跨平台管理不同RDBMS.
.SQL Server数据库sa密码相关问题.
.初学者必读:精讲SQL中的时间计算.
.SQL Server数据库连接查询的种类.
.解决SQL Server 2000 JDBC 驱动程.
.用SQL Server Everywhere保存离线.
.如何把图片、声音等存储到sql中.
.SQL Server导出表到EXCEL文件的存.
.SQL Server 2000 sp4与数据链接池.
.SQL Server 2005新功能-TSQL .
.SQL中使用Case的情況.
.教你在SQL Server数据库中拆分字.

讲解SQL Server数据库中函数的使用方法

发表日期:2008-5-29


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

◆1. 由于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(0.0)

END

SELECT @TASKID=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

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

CREATE PROCEDURE [DBO].[PROC_CALCCA]

@ROID INT

AS

BEGIN

DECLARE @CA FLOAT

UPDATE TABLEFMECA

SET

Cvalue_M= ISNULL(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. 我们要根据某表的某些记录,先计算后求和,因为无法存储中间值,平时我们也用游标的方法进行计算。但SQL Server 2000里支持。

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

END

SELECT @QXS= ISNULL(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

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

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

上一篇:关于SQL Server数据库备份和恢复特性介绍 人气:1102
下一篇:SQL Server 2005数据库中的Output子句 人气:857
浏览全部SQL Server的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐