除了使用系統提供的函數外,用戶還可以根據需要自定義函數。用戶自定義函數(User Defined Functions)是SQL Server 2000 新增的數據庫對象,是SQL Server 的一大改進。
用戶自定義函數不能用於執行一系列改變數據庫狀態的操作,但它可以像系統函數一樣在查詢或存儲過程等的程序段中使用,也可以像存儲過程一樣通過EXECUTE 命令來執行。用戶自定義函數中存儲了一個Transact-SQL 例程,可以返回一定的值。
在SQL Server 2000 中根據函數返回值形式的不同將用戶自定義函數分為三種類型:
- 標量型函數(Scalar functions)
標量型函數返回一個確定類型的標量值其返回值類型為除TEXT、 NTEXT、 IMAGE、CURSOR、 TIMESTAMP 和TABLE 類型外的其它數據類型。函數體語句定義在BEGIN-END語句內,其中包含了可以返回值的Transact-SQL 命令。
- 內聯表值型函數(Inline table-valued functions)
內聯表值型函數以表的形式返回一個返回值,即它返回的是一個表內聯表值型函數沒有由BEGIN-END 語句括起來的函數體。其返回的表由一個位於RETURN 子句中的SELECT 命令段從數據庫中篩選出來。內聯表值型函數功能相當於一個參數化的視圖。
- 多聲明表值型函數(Multi-statement table-valued functions)
多聲明表值型函數可以看作標量型和內聯表值型函數的結合體。它的返回值是一個表,但它和標量型函數一樣有一個用BEGIN-END 語句括起來的函數體,返回值的表中的數據是由函數體中的語句插入的。由此可見,它可以進行多次查詢,對數據進行多次篩選
與合並,彌補了內聯表值型函數的不足。
13.13.1 創建用戶自定義函數
SQL Server 2000 為三種類型的用戶自定義函數提供了不同的命令創建格式。
(1) 創建標量型用戶自定義函數(Scalar functions) 其語法如下:
各參數說明如下:
- owner_name
指定用戶自定義函數的所有者。
- function_name
指定用戶自定義函數的名稱。database_name.owner_name.function_name 應是惟一的。
- @parameter_name
定義一個或多個參數的名稱。一個函數最多可以定義1024 個參數每個參數前用“@”符號標明。參數的作用范圍是整個函數。參數只能替代常量,不能替代表名、列名或其它數據庫對象的名稱。用戶自定義函數不支持輸出參數。
- scalar_parameter_data_type
指定標量型參數的數據類型,可以為除TEXT、 NTEXT、 IMAGE、 CURSOR、TIMESTAMP 和TABLE 類型外的其它數據類型。
- scalar_return_data_type
指定標量型返回值的數據類型,可以為除TEXT、 NTEXT、 IMAGE、 CURSOR、TIMESTAMP 和TABLE 類型外的其它數據類型。
- scalar_expression
指定標量型用戶自定義函數返回的標量值表達式。