數據庫 用戶自定義函數

用戶自定義函數

用戶自定義函數和存儲過程比較

比較項 存儲過程 用戶自定義函數
參數 允許有多個輸入輸出參數 允許有0到多個輸入參數,不允許有多個輸出參數(且參數要用用括號括起來)
返回值 可以沒有返回值 有且只有一個返回值
調用 使用excute調用 在表達式或者賦值語句中調用

創建用戶自定義函數

(1)創建標量型函數
eg:1)在student數據庫中,創建標量函數,統計“課程”表中總共有多少條門課程,寫出程序代碼。(要求:在建立函數之前,爲排除重名函數,先判斷要創建的函數是否存在,如果存在則先刪除。)

use student
go
if exists (select name from sysobjects where name = 'Ccount' and type = 'FN')
drop function dbo.Ccount
go
create function dbo.Ccount()
returns int
as
begin
		declare @num int
		set @num = 0
		select @num = count(*)
		from 學生課程
		return @num
end
go
-- 調用函數查詢
use student
go
declare @num int
set @num = 0
set @num = dbo.Ccount()
print '課程表中總共有:'+cast(@num as char(1)) + '門課程'
go


(2)創建內聯表值函數(沒有函數主體,表是單個select語句的結果,直接return select語句的值)
eg:在student數據庫中,創建內嵌表值函數,該函數給出制定學生所選修課程記錄,即“學號”作爲輸入參數,寫出程序代碼。

if exists (select name from sysobjects where name = 'Cchoose' and type = 'FN')
drop function dbo.Cchoose
go
create function dbo.Cchoose(@Cname as nvarchar(20))
returns table
as
return (select a.學號
		from 學生成績 a,學生課程 b
		where  a.課程號 = b.課程號 and b.課程名稱 = @Cname)
go
-- 調用函數查詢選修C語言情況
use student
go
declare @Cname nvarchar(20)
set @Cname = 'C語言'
select *
from dbo.Cchoose(@Cname)
go

(3)創建多語句表值函數(返回一個表)

if exists (select name from sysobjects where name = 'Cchoose1' and type = 'FN')
drop function dbo.Cchoose1
go
create function dbo.Cchoose1 (@Cname as nvarchar(20))
returns @Cchoosetable table (學號 char(7))
as
begin
		insert @Cchoosetable
		select a.學號
		from 學生成績 a,學生課程
		where  a.課程號 = b.課程號 and b.課程名稱 = @Cname 
		return
end
go
-- 調用函數查詢學修C語言情況
use student
go
declare @Cname nvarchar(20)
set @Cname = 'C語言'
select *
from dbo.Cchoose1(@Cname)
go

管理用戶自定義函數

(1)查看用戶自定義函數
exec sp_helptext 用戶定義函數名稱
exec sp_help 用戶定義函數名稱
(2)修改用戶定義函數
alter function 用戶自定義函數名

重寫一遍函數的實現

(3)刪除用戶定義的函數
drop function 用戶自定義的函數名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章