溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SqlServer系列筆記——用戶自定義函數(shù)

發(fā)布時間:2020-08-12 00:22:12 來源:網(wǎng)絡(luò) 閱讀:345 作者:codejson 欄目:數(shù)據(jù)庫

 用戶自定義函數(shù)不能用于執(zhí)行一系列改變數(shù)據(jù)庫狀態(tài)的操作,但它可以像系統(tǒng)函數(shù)一樣在查詢或存儲過程等的程序段中使用,也可以像存儲過程一樣通過 EXECUTE 命令來執(zhí)行。


    在 SQL Server 中根據(jù)函數(shù)返回值形式的不同將用戶自定義函數(shù)分為三種類型:


    (1)標(biāo)量函數(shù)


    (2)內(nèi)聯(lián)表值函數(shù)


    (3)多語句表值函數(shù)


    注意:與編程語言中的函數(shù)不同的是,SQL Server 自定義函數(shù)必須具有返回值。


 


標(biāo)量函數(shù)


    標(biāo)量函數(shù)返回一個確定類型的標(biāo)量值,其返回值類型為除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE類型外的其它數(shù)據(jù)類型。函數(shù)體語句定義在BEGIN-END語句內(nèi)。在 RETURNS 子句中定義返回值的數(shù)據(jù)類型,并且函數(shù)的最后一條語句必須為Return語句。創(chuàng)建標(biāo)量函數(shù)的格式:


    Create Function 函數(shù)名(參數(shù))


    Returns 返回值數(shù)據(jù)類型


    [With {Encryption|Schemabinding}]


    [AS]


    BEGIN


        SQL語句(必須有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 語句中允許使用標(biāo)量表達(dá)式的任何位置調(diào)用返回標(biāo)量值(與標(biāo)量表達(dá)式的數(shù)據(jù)類型相同)的任何函數(shù)。必須使用至少由兩部分組成名稱的函數(shù)來調(diào)用標(biāo)量值函數(shù),即架構(gòu)名.對象名,如dbo.Max(12,34)。


 


內(nèi)聯(lián)表值函數(shù)


    內(nèi)聯(lián)表值型函數(shù)以表的形式返回一個返回值,即它返回的是一個表。內(nèi)聯(lián)表值型函數(shù)沒有由BEGIN-END 語句括起來的函數(shù)體。其返回的表是由一個位于 RETURN 子句中的 SELECT 命令從數(shù)據(jù)庫中篩選出來。內(nèi)聯(lián)表值型函數(shù)功能相當(dāng)于一個參數(shù)化的視圖。


    Create Function 函數(shù)名(參數(shù))


    RETURNS table


    [with {Encryption|Schemabinding}]


    AS


    Return(一條SQL語句)


    舉例:


    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)用時不需指定架構(gòu)名,如select * from func('51300521')


 


多語句表值函數(shù)


    多語句表值函數(shù)可以看作標(biāo)量函數(shù)和內(nèi)聯(lián)表值函數(shù)的結(jié)合體。它的返回值是一個表,但它和標(biāo)量型函數(shù)一樣有一個用 BEGIN-END 語句括起來的函數(shù)體,返回值的表中的數(shù)據(jù)是由函數(shù)體中的語句插入的。由此可見,它可以進(jìn)行多次查詢,對數(shù)據(jù)進(jìn)行多次篩選與合并,彌補(bǔ)了內(nèi)聯(lián)表值函數(shù)的不足。


    Create Function 函數(shù)名(參數(shù))


    RETURNS 表變量名 (表變量字段定義)


    [with {Encryption|Schemabinding}]


    AS


    BEGIN


        SQL語句


        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)用多語句表值函數(shù):和調(diào)用內(nèi)聯(lián)表值函數(shù)一樣,調(diào)用時不需制定架構(gòu)名。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI