除了使用系統提供的函式外,使用者還可以根據需要自定義函式。使用者自定義函式是 sql server 2000 新增的資料庫物件,是 sql server 的一大改進。與程式語言中的函式類似,microsoft sql server 使用者定義函式是接受引數、執行操作(例如複雜計算)並將操作結果以值的形式返回的例程。返回值可以是單個標量值或表變數結果集。
使用者自定義函式不能用於執行一系列改變資料庫狀態的操作,但它可以像系統函式一樣在查詢或儲存過程等的程式段中使用,也可以像儲存過程一樣通過 execute 命令來執行。
在 sql server 中根據函式返回值形式的不同將使用者自定義函式分為三種型別:
(1)標量函式
(2)內聯錶值函式
(3)多語句錶值函式
注意:與程式語言中的函式不同的是,sql server 自定義函式必須具有返回值。
標量函式
標量函式返回乙個確定型別的標量值,其返回值型別為除text、ntext、image、cursor、timestamp和table型別外的其它資料型別。函式體語句定義在begin-end語句內。在 returns 子句中定義返回值的資料型別,並且函式的最後一條語句必須為return語句。建立標量函式的格式:
create function 函式名(引數)呼叫標量函式returns 返回值資料型別
[with
][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
可以在 t-sql 語句中允許使用標量表示式的任何位置呼叫返回標量值(與標量表示式的資料型別相同)的任何函式。必須使用至少由兩部分組成名稱的函式來呼叫標量值函式,即架構名.物件名,如dbo.max(12,34)。
內聯錶值函式
內聯錶值型函式以表的形式返回乙個返回值,即它返回的是乙個表。內聯錶值型函式沒有由begin-end 語句括起來的函式體。其返回的表是由乙個位於 return 子句中的 select 命令從資料庫中篩選出來。內聯錶值型函式功能相當於乙個引數化的檢視。
create呼叫內聯錶值函式:呼叫時不需指定架構名,如select * from func('51300521')function 函式名(引數)
returns table
[with]as
return(一條sql語句)
舉例:
create function func (@id char(8))
returns table
asreturn
(select * from student where sid = @id
)
多語句錶值函式
多語句錶值函式可以看作標量函式和內聯錶值函式的結合體。它的返回值是乙個表,但它和標量型函式一樣有乙個用 begin-end 語句括起來的函式體,返回值的表中的資料是由函式體中的語句插入的。由此可見,它可以進行多次查詢,對資料進行多次篩選與合併,彌補了內聯錶值函式的不足。
create呼叫多語句錶值函式:和呼叫內聯錶值函式一樣,呼叫時不需制定架構名。function 函式名(引數)
returns 表變數名 (表變數字段定義)
[with]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
注意:schemabinding用於將函式繫結到它引用的物件上。函式一旦繫結,則不能刪除、修改,除非刪除繫結。
SQL Server 使用者自定義函式
除了使用系統提供的函式外,使用者還可以根據需要自定義函式。使用者自定義函式是 sql server 2000 新增的資料庫物件,是 sql server 的一大改進。與程式語言中的函式類似,microsoft sql server 使用者定義函式是接受引數 執行操作 例如複雜計算 並將操作結果以值的...
SQL Server 使用者自定義函式
除了使用系統提供的函式外,使用者還可以根據需要自定義函式。使用者自定義函式是 sql server 2000 新增的資料庫物件,是 sql server 的一大改進。與程式語言中的函式類似,microsoft sql server 使用者定義函式是接受引數 執行操作 例如複雜計算 並將操作結果以值的...
SQL Server 使用者自定義函式
除了使用系統提供的函式外,使用者還可以根據需要自定義函式。使用者自定義函式是 sql server 2000 新增的資料庫物件,是 sql server 的一大改進。與程式語言中的函式類似,microsoft sql server 使用者定義函式是接受引數 執行操作 例如複雜計算 並將操作結果以值的...