在程式設計過程中,我們通常把特定的功能語句塊封裝稱函式,方便**的重用。我們可以在sql server中自定義函式,根據函式返回值的區別,我們自定義的函式分兩種:標量值函式和錶值函式。
自定義函式的優點:
乙個函式最多可以有1024個引數;在呼叫函式時,如果未定義引數的預設值,則必須提供已宣告引數的值。
下面的這個函式根據生日返回年齡:
createsql執行這段指令碼建立函式,建立成功之後,我們呼叫一下看看效果:function dbo.calcage(@birthday
datetime) --
函式名和引數
returns
int--
返回值型別
asbegin
declare
@now
datetime
declare
@age
intset
@now
=getdate
()
set@age
=year(@now)-
year(@birthday
)
return
@age
--返回值
end
print dbo.calcage('輸出:152000-1-1
')
注意:在呼叫自定義函式的時候,我們必須給出schema_name(架構名,此處是dbo),否則會提示「'calcage' 不是可以識別的 內建函式名稱。」
顧名思義,錶值函式的返回值不再是乙個標量值,而是乙個資料表;錶值函式返回的表與其它資料表一樣,可以進行join、where等操作。
createsql上面的**完成了乙個錶值函式的建立。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函式:
altersql使用drop語句刪除:function getuser --
指明要修改的函式名
(@status
int) --
修改引數型別
returns
table
asreturn
(
select
id,username,
[status
]from
tb_user
where
[status]=
@status
)
dropfunction calcage
SQL Server程式設計(02)自定義函式
在程式設計過程中,我們通常把特定的功能語句塊封裝稱函式,方便 的重用。我們可以在sql server中自定義函式,根據函式返回值的區別,我們自定義的函式分兩種 標量值函式和錶值函式。自定義函式的優點 乙個函式最多可以有1024個引數 在呼叫函式時,如果未定義引數的預設值,則必須提供已宣告引數的值。下...
SQL Server程式設計(02)自定義函式
在程式設計過程中,我們通常把特定的功能語句塊封裝稱函式,方便 的重用。我們可以在sql server中自定義函式,根據函式返回值的區別,我們自定義的函式分兩種 標量值函式和錶值函式。自定義函式的優點 乙個函式最多可以有1024個引數 在呼叫函式時,如果未定義引數的預設值,則必須提供已宣告引數的值。下...
SQL Server程式設計(03)自定義儲存過程
儲存過程是一組預編譯的sql語句,它可以包含資料操縱語句 變數 邏輯控制語句等。儲存過程允許帶引數 儲存過程的優點 執行速度快 允許模組化設計 提高系統安全性 減少網路流量 我們可以使用create procedure命令建立儲存過程。create procedure calcage birthda...