SQL Server編程(02)自定義函數


在編程過程中,我們通常把特定的功能語句塊封裝稱函數,方便代碼的重用。我們可以在SQL Server中自定義函數,根據函數返回值的區別,我們自定義的函數分兩種:標量值函數和表值函數。

自定義函數的優點:

  • 模塊化程序設計
  • 更快的執行速度
  • 減少網絡傳輸

一個函數最多可以有1024個參數;在調用函數時,如果未定義參數的默認值,則必須提供已聲明參數的值。

創建標量值函數

下面的這個函數根據生日返回年齡:

create function dbo.calcAge(@birthday datetime)    --函數名和參數
returns int    --返回值類型
as
begin
    declare @now datetime
    declare @age int
    set @now=getdate()

    set @age=YEAR(@now)-YEAR(@birthday)

    return @age    --返回值
end

執行這段腳本創建函數,創建成功之后,我們調用一下看看效果:

print dbo.calcAge('2000-1-1')

輸出:15

注意:在調用自定義函數的時候,我們必須給出schema_name(架構名,此處是dbo),否則會提示“'calcAge' 不是可以識別的 內置函數名稱。”

創建表值函數

顧名思義,表值函數的返回值不再是一個標量值,而是一個數據表;表值函數返回的表與其它數據表一樣,可以進行join、where等操作。

create function getUser(@name nvarchar(50))
returns table
as
return (
    select 
        Id,UserName,[Status] 
    from 
        tb_user
    where UserName like '%' + @name + '%'
)

上面的代碼完成了一個表值函數的創建。

在創建的過程中遇到一點疑問表值函數不能包含begin…end這樣的語句塊,只能用return返回table此處存疑

可以將表值函數放在select語句中使用:

select * from dbo.getUser('admin')

得到的結果集:

image

 

修改自定義函數

使用alter語句修改自定義函數,下面的代碼演示如何修改getUser函數:

alter function getUser    --指明要修改的函數名
(@status int)    --修改參數類型
returns table
as
return (
    select 
        Id,UserName,[Status] 
    from 
        tb_user
    where [Status]=@status
)

 

刪除自定義函數

使用drop語句刪除:

drop function calcAge

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM