SQL Server程式設計(02)自定義函式

2022-03-08 19:06:47 字數 1525 閱讀 1378

在程式設計過程中,我們通常把特定的功能語句塊封裝稱函式,方便**的重用。我們可以在sql server中自定義函式,根據函式返回值的區別,我們自定義的函式分兩種:標量值函式和錶值函式。

自定義函式的優點:

乙個函式最多可以有1024個引數;在呼叫函式時,如果未定義引數的預設值,則必須提供已宣告引數的值。

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

create function dbo.calcage(@birthday datetime)    --函式名和引數

returns int --返回值型別

asbegin

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

asreturn (

select

id,username,[status]

from

tb_user

where username like '%' + @name + '%'

)

上面的**完成了乙個錶值函式的建立。

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

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

select * from dbo.getuser('admin')
得到的結果集:

使用alter語句修改自定義函式,下面的**演示如何修改getuser函式:

alter function getuser    --指明要修改的函式名

(@status int) --修改引數型別

returns table

asreturn (

select

id,username,[status]

from

tb_user

where [status]=@status

)

使用drop語句刪除:

drop function calcage

SQL Server程式設計(02)自定義函式

在程式設計過程中,我們通常把特定的功能語句塊封裝稱函式,方便 的重用。我們可以在sql server中自定義函式,根據函式返回值的區別,我們自定義的函式分兩種 標量值函式和錶值函式。自定義函式的優點 乙個函式最多可以有1024個引數 在呼叫函式時,如果未定義引數的預設值,則必須提供已宣告引數的值。下...

SQL Server程式設計(02)自定義函式

在程式設計過程中,我們通常把特定的功能語句塊封裝稱函式,方便 的重用。我們可以在sql server中自定義函式,根據函式返回值的區別,我們自定義的函式分兩種 標量值函式和錶值函式。自定義函式的優點 乙個函式最多可以有1024個引數 在呼叫函式時,如果未定義引數的預設值,則必須提供已宣告引數的值。下...

SQL Server程式設計(03)自定義儲存過程

儲存過程是一組預編譯的sql語句,它可以包含資料操縱語句 變數 邏輯控制語句等。儲存過程允許帶引數 儲存過程的優點 執行速度快 允許模組化設計 提高系統安全性 減少網路流量 我們可以使用create procedure命令建立儲存過程。create procedure calcage birthda...