原文連結:http://www.cftea.com/c/2007/08/6HLN4P3VBKA1W2EA.asp
“自訂函數”是我們平常的說法,而“使用者定義的函數”是 SQL Server 中書面的說法。
SQL Server 2000 允許使用者建立自訂函數,自訂函數可以有傳回值。
自訂函數分為:純量值函式或資料表值函式
- 如果 RETURNS 子句指定一種純量資料型別,則函數為純量值函式。可以使用多條 Transact-SQL 陳述式定義純量值函式。
- 如果 RETURNS 子句指定 TABLE,則函數為資料表值函式。
資料表值函式又可分為:內嵌資料表值函式(行內函數)或多語句函數
- 如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數為內嵌資料表值函式。
- 如果 RETURNS 子句指定的 TABLE 類型帶有列及其資料類型,則該函數是多語句資料表值函式。
純量值函式樣本
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END
內嵌資料表值函式樣本
CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS
return select id, title from msgs
內嵌資料表值函式只有一個 select 語句。
多語句資料表值函式樣本(部分)
CREATE FUNCTION fn_FindReports (@InEmpId nchar(5))
RETURNS @retFindReports TABLE (empid nchar(5) primary key,
empname nvarchar(50) NOT NULL,
mgrid nchar(5),
title nvarchar(30))
...
注意其 RETURNS 部分。
多語句函數的主體中允許使用以下語句。未在下面的列表中列出的語句不能用在函數主體中。
- 指派陳述式。
- 控制流程語句。
- DECLARE 語句,該語句定義函數局部的資料變數和遊標。
- SELECT 語句,該語句包含帶有運算式的挑選清單,其中的運算式將值賦予函數的局部變數。
- 遊標操作,該操作引用在函數中聲明、開啟、關閉和釋放的局部遊標。只允許使用以 INTO 子句向局部變數賦值的 FETCH 語句;不允許使用將資料返回到用戶端的 FETCH 語句。
- INSERT、UPDATE 和 DELETE 語句,這些語句修改函數的局部 table 變數。
- EXECUTE 語句調用擴充預存程序。