主頁 > 知識庫 > sqlserver中的自定義函數(shù)的方法小結(jié)

sqlserver中的自定義函數(shù)的方法小結(jié)

熱門標(biāo)簽:地方門戶網(wǎng)站 AI電銷 網(wǎng)站排名優(yōu)化 鐵路電話系統(tǒng) Linux服務(wù)器 服務(wù)外包 呼叫中心市場需求 百度競價排名
“自定義函數(shù)”是我們平常的說法,而“用戶定義的函數(shù)”是 SQL Server 中書面的說法。

SQL Server 2000 允許用戶創(chuàng)建自定義函數(shù),自定義函數(shù)可以有返回值。

自定義函數(shù)分為:標(biāo)量值函數(shù)或表值函數(shù)

如果 RETURNS 子句指定一種標(biāo)量數(shù)據(jù)類型,則函數(shù)為標(biāo)量值函數(shù)??梢允褂枚鄺l Transact-SQL 語句定義標(biāo)量值函數(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ù)。
標(biāo)量值函數(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ù)變量和游標(biāo)。
SELECT 語句,該語句包含帶有表達式的選擇列表,其中的表達式將值賦予函數(shù)的局部變量。
游標(biāo)操作,該操作引用在函數(shù)中聲明、打開、關(guān)閉和釋放的局部游標(biāo)。只允許使用以 INTO 子句向局部變量賦值的 FETCH 語句;不允許使用將數(shù)據(jù)返回到客戶端的 FETCH 語句。
INSERT、UPDATE 和 DELETE 語句,這些語句修改函數(shù)的局部 table 變量。
EXECUTE 語句調(diào)用擴展存儲過程。
您可能感興趣的文章:
  • CREATE FUNCTION sqlserver用戶定義函數(shù)
  • Sqlserver 自定義函數(shù) Function使用介紹
  • SQL Server自定義異常raiserror使用示例
  • 詳解SQL Server數(shù)據(jù)庫架構(gòu)和對象、定義數(shù)據(jù)完整性
  • Sql Server的一些知識點定義總結(jié)

標(biāo)簽:仙桃 黃山 湘潭 湖南 衡水 蘭州 崇左 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sqlserver中的自定義函數(shù)的方法小結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266