程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server數據庫中函數的使用方法

SQL Server數據庫中函數的使用方法

編輯:關於SqlServer
 

本文主要主要講解了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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved