新聞中心
導(dǎo)讀:本文主要主要講解了SQL Server數(shù)據(jù)庫中函數(shù)的兩種用法,具體內(nèi)容請(qǐng)參考下文:

創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、蕉嶺網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為蕉嶺等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
1. 由于update里不能用存儲(chǔ)過程,并且由于根據(jù)更新表的某些字段還要進(jìn)行計(jì)算。所以很多人采用的是游標(biāo)的方法,在這里我們可以用函數(shù)的方法實(shí)現(xiàn)。
函數(shù)部分:
- 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
調(diào)用函數(shù)的存儲(chǔ)過程部分:
- 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. 我們要根據(jù)某表的某些記錄,先計(jì)算后求和,因?yàn)闊o法存儲(chǔ)中間值,平時(shí)我們也用游標(biāo)的方法進(jìn)行計(jì)算。但SQL Server 2000里支持。
SUM ( [ ALL DISTINCT ] eXPression )
expression
是常量、列或函數(shù),或者是算術(shù)、按位與字符串等運(yùn)算符的任意組合。因此我們可以利用這一功能。
函數(shù)部分:
- 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
調(diào)用函數(shù)的存儲(chǔ)過程部分:
- 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
本文就為大家總結(jié)出了這兩種SQL Server數(shù)據(jù)庫函數(shù)使用方法,如果大家有更多更好的方法,歡迎拿出來與大家一起分享。
新聞名稱:講解SQLServer數(shù)據(jù)庫中函數(shù)的使用方法
網(wǎng)站URL:http://fisionsoft.com.cn/article/djpoohh.html


咨詢
建站咨詢
