SQL Server 使用者自定義函式

2021-09-22 11:07:58 字數 2521 閱讀 2197

除了使用系統提供的函式外,使用者還可以根據需要自定義函式。使用者自定義函式是 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 function 函式名(引數)

returns table

[with ]

asreturn(一條sql語句)

舉例:

create function func (@id char(8))

returns table

asreturn

(select * from student where sid = @id

)

呼叫內聯錶值函式:呼叫時不需指定架構名,如select * from func('51300521')

多語句錶值函式

多語句錶值函式可以看作標量函式和內聯錶值函式的結合體。它的返回值是乙個表,但它和標量型函式一樣有乙個用 begin-end 語句括起來的函式體,返回值的表中的資料是由函式體中的語句插入的。由此可見,它可以進行多次查詢,對資料進行多次篩選與合併,彌補了內聯錶值函式的不足。

create function 函式名(引數)

returns 表變數名 (表變數字段定義)

[with ]

asbegin

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 使用者定義函式是接受引數 執行操作 例如複雜計算 並將操作結果以值的...