sqlserver中的自定義函數(shù)的方法小結(jié)
更新時間:2010年06月11日 01:22:18 作者:
“自定義函數(shù)”是我們平常的說法,而“用戶定義的函數(shù)”是 SQL Server 中書面的說法。
“自定義函數(shù)”是我們平常的說法,而“用戶定義的函數(shù)”是 SQL Server 中書面的說法。
SQL Server 2000 允許用戶創(chuàng)建自定義函數(shù),自定義函數(shù)可以有返回值。
自定義函數(shù)分為:標量值函數(shù)或表值函數(shù)
如果 RETURNS 子句指定一種標量數(shù)據(jù)類型,則函數(shù)為標量值函數(shù)??梢允褂枚鄺l Transact-SQL 語句定義標量值函數(shù)。
如果 RETURNS 子句指定 TABLE,則函數(shù)為表值函數(shù)。
表值函數(shù)又可分為:內(nèi)嵌表值函數(shù)(行內(nèi)函數(shù))或多語句函數(shù)
如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數(shù)為內(nèi)嵌表值函數(shù)。
如果 RETURNS 子句指定的 TABLE 類型帶有列及其數(shù)據(jù)類型,則該函數(shù)是多語句表值函數(shù)。
標量值函數(shù)示例
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END
內(nèi)嵌表值函數(shù)示例
CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS
return select id, title from msgs
內(nèi)嵌表值函數(shù)只有一個 select 語句。
多語句表值函數(shù)示例(部分)
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 部分。
多語句函數(shù)的主體中允許使用以下語句。未在下面的列表中列出的語句不能用在函數(shù)主體中。
賦值語句。
控制流語句。
DECLARE 語句,該語句定義函數(shù)局部的數(shù)據(jù)變量和游標。
SELECT 語句,該語句包含帶有表達式的選擇列表,其中的表達式將值賦予函數(shù)的局部變量。
游標操作,該操作引用在函數(shù)中聲明、打開、關(guān)閉和釋放的局部游標。只允許使用以 INTO 子句向局部變量賦值的 FETCH 語句;不允許使用將數(shù)據(jù)返回到客戶端的 FETCH 語句。
INSERT、UPDATE 和 DELETE 語句,這些語句修改函數(shù)的局部 table 變量。
EXECUTE 語句調(diào)用擴展存儲過程。
SQL Server 2000 允許用戶創(chuàng)建自定義函數(shù),自定義函數(shù)可以有返回值。
自定義函數(shù)分為:標量值函數(shù)或表值函數(shù)
如果 RETURNS 子句指定一種標量數(shù)據(jù)類型,則函數(shù)為標量值函數(shù)??梢允褂枚鄺l Transact-SQL 語句定義標量值函數(shù)。
如果 RETURNS 子句指定 TABLE,則函數(shù)為表值函數(shù)。
表值函數(shù)又可分為:內(nèi)嵌表值函數(shù)(行內(nèi)函數(shù))或多語句函數(shù)
如果 RETURNS 子句指定的 TABLE 不附帶列的列表,則該函數(shù)為內(nèi)嵌表值函數(shù)。
如果 RETURNS 子句指定的 TABLE 類型帶有列及其數(shù)據(jù)類型,則該函數(shù)是多語句表值函數(shù)。
標量值函數(shù)示例
復(fù)制代碼 代碼如下:
CREATE FUNCTION dbo.Foo()
RETURNS int
AS
BEGIN
declare @n int
select @n=3
return @n
END
內(nèi)嵌表值函數(shù)示例
復(fù)制代碼 代碼如下:
CREATE FUNCTION dbo.Foo()
RETURNS TABLE
AS
return select id, title from msgs
內(nèi)嵌表值函數(shù)只有一個 select 語句。
多語句表值函數(shù)示例(部分)
復(fù)制代碼 代碼如下:
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 部分。
多語句函數(shù)的主體中允許使用以下語句。未在下面的列表中列出的語句不能用在函數(shù)主體中。
賦值語句。
控制流語句。
DECLARE 語句,該語句定義函數(shù)局部的數(shù)據(jù)變量和游標。
SELECT 語句,該語句包含帶有表達式的選擇列表,其中的表達式將值賦予函數(shù)的局部變量。
游標操作,該操作引用在函數(shù)中聲明、打開、關(guān)閉和釋放的局部游標。只允許使用以 INTO 子句向局部變量賦值的 FETCH 語句;不允許使用將數(shù)據(jù)返回到客戶端的 FETCH 語句。
INSERT、UPDATE 和 DELETE 語句,這些語句修改函數(shù)的局部 table 變量。
EXECUTE 語句調(diào)用擴展存儲過程。
相關(guān)文章
SQL?Server中row_number函數(shù)用法入門介紹
SQL?ROW_NUMBER函數(shù)是臨時值序列的非持久生成,并且在執(zhí)行查詢時會動態(tài)計算該函數(shù),下面這篇文章主要給大家介紹了關(guān)于SQL?Server中row_number函數(shù)用法的相關(guān)資料,需要的朋友可以參考下2023-03-03通過T-SQL語句實現(xiàn)數(shù)據(jù)庫備份與還原的代碼
利用T-SQL語句,實現(xiàn)數(shù)據(jù)庫的備份與還原的功能,需要的朋友可以參考下。2011-11-11SQL Server利用sp_spaceused如何查看表記錄存在不準確的情況
這篇文章主要給大家介紹了關(guān)于SQL Server利用sp_spaceused如何查看表記錄存在不準確情況的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用SQL Server具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04如何通過sysprocesses 簡單查詢死鎖及解決死鎖最新方案(四步解決)
這篇文章主要介紹了如何通過sysprocesses 簡單查詢死鎖及解決死鎖最新方案,本文分四步幫助大家成功解決,需要的朋友可以參考下2024-02-02SQL2008的sa賬戶被禁用其他賬戶無法連接的快速解決方法
這篇文章主要介紹了SQL2008的sa賬戶被禁用其他賬戶無法連接的快速解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03sql server把退款總金額拆分到盡量少的多個訂單中詳解
這篇文章主要給大家介紹了關(guān)于sql server把退款總金額拆分到盡量少的多個訂單中的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12SQLServer 2000 升級到 SQLServer 2008 性能之需要注意的地方之一
今天在 相同環(huán)境測試 2000 和 2008 性能 讓我意外的是 2008 明顯比2000 慢很多,因為不能簡單的升級,sql語句也需要優(yōu)化2012-02-02