用戶(hù)自定義函數(shù)不能用于執(zhí)行一系列改變數(shù)據(jù)庫(kù)狀態(tài)的操作,但它可以像系統(tǒng)函數(shù)一樣在查詢(xún)或存儲(chǔ)過(guò)程等的程序段中使用,也可以像存儲(chǔ)過(guò)程一樣通過(guò) EXECUTE 命令來(lái)執(zhí)行。
創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站制作、南召網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、南召網(wǎng)絡(luò)營(yíng)銷(xiāo)、南召企業(yè)策劃、南召品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供南召建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18980820575,官方網(wǎng)址:m.rwnh.cn
在 SQL Server 中根據(jù)函數(shù)返回值形式的不同將用戶(hù)自定義函數(shù)分為三種類(lèi)型:
(1)標(biāo)量函數(shù)
(2)內(nèi)聯(lián)表值函數(shù)
(3)多語(yǔ)句表值函數(shù)
注意:與編程語(yǔ)言中的函數(shù)不同的是,SQL Server 自定義函數(shù)必須具有返回值。
標(biāo)量函數(shù)
標(biāo)量函數(shù)返回一個(gè)確定類(lèi)型的標(biāo)量值,其返回值類(lèi)型為除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE類(lèi)型外的其它數(shù)據(jù)類(lèi)型。函數(shù)體語(yǔ)句定義在BEGIN-END語(yǔ)句內(nèi)。在 RETURNS 子句中定義返回值的數(shù)據(jù)類(lèi)型,并且函數(shù)的最后一條語(yǔ)句必須為Return語(yǔ)句。創(chuàng)建標(biāo)量函數(shù)的格式:
Create Function 函數(shù)名(參數(shù))
Returns 返回值數(shù)據(jù)類(lèi)型
[With {Encryption|Schemabinding}]
[AS]
BEGIN
SQL語(yǔ)句(必須有Return子句)
END
舉例:
CREATE FUNCTION dbo.Max
(
@a int,
@b int
)
RETURNS int AS
BEGIN
DECLARE @max int
IF @a>@b SET @max=@a
ELSE SET @max=@b
Return @max
END
調(diào)用標(biāo)量函數(shù)
可以在 T-SQL 語(yǔ)句中允許使用標(biāo)量表達(dá)式的任何位置調(diào)用返回標(biāo)量值(與標(biāo)量表達(dá)式的數(shù)據(jù)類(lèi)型相同)的任何函數(shù)。必須使用至少由兩部分組成名稱(chēng)的函數(shù)來(lái)調(diào)用標(biāo)量值函數(shù),即架構(gòu)名.對(duì)象名,如dbo.Max(12,34)。
內(nèi)聯(lián)表值函數(shù)
內(nèi)聯(lián)表值型函數(shù)以表的形式返回一個(gè)返回值,即它返回的是一個(gè)表。內(nèi)聯(lián)表值型函數(shù)沒(méi)有由BEGIN-END 語(yǔ)句括起來(lái)的函數(shù)體。其返回的表是由一個(gè)位于 RETURN 子句中的 SELECT 命令從數(shù)據(jù)庫(kù)中篩選出來(lái)。內(nèi)聯(lián)表值型函數(shù)功能相當(dāng)于一個(gè)參數(shù)化的視圖。
Create Function 函數(shù)名(參數(shù))
RETURNS table
[with {Encryption|Schemabinding}]
AS
Return(一條SQL語(yǔ)句)
舉例:
CREATE FUNCTION func (@id char(8))
RETURNS TABLE
AS
RETURN
(
SELECT * FROM student WHERE SID = @id
)
調(diào)用內(nèi)聯(lián)表值函數(shù):調(diào)用時(shí)不需指定架構(gòu)名,如select * from func('51300521')
多語(yǔ)句表值函數(shù)
多語(yǔ)句表值函數(shù)可以看作標(biāo)量函數(shù)和內(nèi)聯(lián)表值函數(shù)的結(jié)合體。它的返回值是一個(gè)表,但它和標(biāo)量型函數(shù)一樣有一個(gè)用 BEGIN-END 語(yǔ)句括起來(lái)的函數(shù)體,返回值的表中的數(shù)據(jù)是由函數(shù)體中的語(yǔ)句插入的。由此可見(jiàn),它可以進(jìn)行多次查詢(xún),對(duì)數(shù)據(jù)進(jìn)行多次篩選與合并,彌補(bǔ)了內(nèi)聯(lián)表值函數(shù)的不足。
Create Function 函數(shù)名(參數(shù))
RETURNS 表變量名 (表變量字段定義)
[with {Encryption|Schemabinding}]
AS
BEGIN
SQL語(yǔ)句
Return
END
舉例:
CREATE FUNCTION func(@selection int)
RETURNS @table TABLE
(
SID char(4) primary key not null,
SName nvarchar(4) null
)
AS
BEGIN
IF @selection = 0
INSERT INTO @table (SELECT SID,SName FROM student0)
ELSE
INSERT INTO @table (SELECT SID,SName FROM student1)
Return
END
調(diào)用多語(yǔ)句表值函數(shù):和調(diào)用內(nèi)聯(lián)表值函數(shù)一樣,調(diào)用時(shí)不需制定架構(gòu)名。
網(wǎng)頁(yè)名稱(chēng):SqlServer系列筆記——用戶(hù)自定義函數(shù)
本文來(lái)源:http://m.rwnh.cn/article22/ipjjcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站改版、響應(yīng)式網(wǎng)站、小程序開(kāi)發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)