程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 深度發掘SQLServer2000UDF(上)

深度發掘SQLServer2000UDF(上)

編輯:關於SqlServer
本文將介紹Microsoft SQL Server 2000的新增特性―用戶自定義函數User-Defined Function(UDF),並演示幾個常用的實例。
  
  UDF的功能類似SQL Server中內建的系統函數,如CONVERT、SUBSTRING、 DATAADD、 GETDATA、ISNULL等等。一個UDF可以沒有參數,或者帶有一個或多個參數,函數運行後將會返回一個函數值。定義UDF的語法如下:
  
  CREATE FUNCTION [ owner_name.] function_name
  
  ( { { @parameter_name scalar_parameter_data_type
  
  [,…n] ] )
  
  RETURN scalar_return_data_type
  
  [WITH < function_option> [, … n]]
  
  [AS]
  
  BEGIN
  
  Function_body
  
  RETURN scalar_expression
  
  END
  
  每個UDF可以帶有0個到1024個參數,每個參數可以是除了timestamp、cursor、table 以外所有的數據類型;函數返回值的限制要更多一些,它不可以是text、ntext、image、timestamp、cursor和table。
  
  函數體是UDF的主要部分,它有兩個選項: ENCRYOTION和 SCHEMABINDING。
  
  SCHEMABINDING是SQL Server 2000的新增功能,可以和視圖一同使用。該選項不允許刪除和修改被該函數引用的對象。這樣可以防止無效的函數和視圖對它們引用的對象進行結構上的修改。
  
  大家會注意到函數體以Begin開始,End結束。這一點不同於創建存儲過程、觸發器和視圖。當您忘了寫上Begin/End時,系統會返回一個提示信息“Incorrect syntax near ‘RETURN’”。為什麼不直接說少了Begin/End,這有點讓人費解。
  
  下面我用幾個例子來說明UDF的應用。
  
  Greatest and Least
  
  為了區別於系統函數Max和Min,我給新函數命名為Greatest和Least,它們會從以參數形式輸入的兩個值中找出最大值和最小值。
  
  Case語句是兩個函數的核心:
  
  CASE WHEN value1 > value2 THEN value1 ELSE value2 END
  
  雖然函數很簡單,但用途是很廣的。
  
  CREATE FUNCTION dbo.Greatest
  
  -- Return the maximum of two parameters
  
  (@Val1 SQL_VARIANT,
  
  @Val2 SQL_VARIANT)
  
  RETURNS SQL_VARIANT
  
  AS
  
  BEGIN
  
  RETURN (CASE WHEN @val1 > @val2 THEN @val1 ELSE @val2 END)
  
  END
  
  go
  
  CREATE FUNCTION dbo.Least
  
  -- Return the minimum of two parameters
  
  ( @val1 SQL_VARIANT,
  
  @val2 SQL_VARIANT )
  
  RETURNS SQL_VARIANT
  
  AS
  
  BEGIN
  
  RETURN (CASE WHEN @val1 < @val2 THEN @val1 ELSE @val2 END)
  
  END
  
  Go
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved