Sql Server系列 自定義函式

2021-09-08 10:36:51 字數 3914 閱讀 2197

使用者自定義函式可以像系統函式一樣在查詢或儲存過程中呼叫,可以接受引數、執行操作並將操作結果以值的形式返回。返回值可以是單個標量或結果集。

1. 標量函式

標量函式返回乙個確定型別的標量值,對於多語句的標量函式,定義在begin end塊中的函式體包含一系列返回單個值的t-sql語句。

建立標量函式語法結構:

create

function

[schema_name.

]function_name ( [

[,...n ]]

)returns

return_data_type

[with [ ,...n ]]

[as

]begin

function_body

return

scalar_expression

end[

; ]

示例:

create

function

[dbo

].[fn_getproductnamebyproductid](

@productid

int)

returns

varchar(50)as

begin

declare

@productname

varchar(50

)

select

@productname=[

productname

]from

[dbo

].[product

]where

[productid]=

@productid

return

@productname

end

select

[dbo

].[fn_getproductnamebyproductid

](1)

--select dbo.fn_getproductnamebyproductid(1)

2. 錶值函式

錶值函式是返回資料型別為table的函式,返回的錶值是單個select語句查詢的結果。

建立錶值函式語法結構:

create

function

[schema_name.

]function_name ( [

[,...n ]]

)returns

table

[with [ ,...n ]]

[as

]return[(

] select_stmt [) ]

[; ]

示例:

create

function

[dbo

].[fn_getproductsbycategoryid](

@categoryid

int)

returns

table

asreturn

(

select

[productid

],[productname

],[unitprice

],[unitsinstock

],[createdate

]from

[dbo

].[product

]where

[categoryid]=

@categoryid

)

select

*from

[dbo

].[fn_getproductsbycategoryid

](1)

3. 多語句錶值函式

多語句錶值函式可以看作標量型函式和錶值函式的結合體。該函式的返回值是乙個表,但它和標量值自定義函式用於,有乙個用begin end包含起來的函式體。返回值的表中資料是由函式體中的語句插入的。多語句錶值函式可以進行多次查詢,對資料進行多次篩選與合併,彌補了錶值自定義函式的不足。

多語句錶值函式語法結構:

create

function

[schema_name.

]function_name ( [

[,...n ]]

)returns

@return_variable

table

[with [ ,...n ]]

[as

]begin

function_body

return

end[

; ]

示例:

create

function

[dbo

].[u

fn_getallchildren](

@categoryid

int)

returns

@result

table

(

[categoryid

]int

notnull

,

[categoryname

]varchar(50) null

,

[parentid

]int

null

,

[level

]int

null)as

begin

with cte as

(

select

[categoryid

],[categoryname

],[parentid

],0as

[level

]from

[dbo

].[category

]where

[categoryid]=

2union

allselect

[dbo

].[category

].[categoryid

],[dbo

].[category

].[categoryname

],[dbo

].[category

].[parentid

],[level]+

1from cte inner

join

[dbo

].[category

]on cte.[

categoryid]=

[dbo

].[category

].[parentid])

insert

into

@result([

categoryid

],[categoryname

],[parentid

],[level])

select

[categoryid

],[categoryname

],[parentid

],[level

]from

cte

return

end

select

*from

[dbo

].[u

fn_getallchildren

](2)

4. 刪除函式

drop

function [

,...n

]

drop

function

[dbo

].[fn_getallchildren

]

C 中建立SQLServer的自定義聚合函式

1.建立 使用vs2005的 聚合函式 模板建立,實現以下幾個方法 init 給每個要聚合的新組初始化 accumulate 將每個值聚合 merge 將乙個聚合組的結果新增到當前組中 terminate 返回結果 2.部署 通過vs2005部署自動在sqlserver中建立聚合函式 3.使用 在s...

自定義實現strcmp,atoi,itoa函式

1.mystrcmp函式,字串比較 abc x abc abc ab aa 第乙個大於第二個則返回正數,相等返回0,第乙個小於第二個返回負數。include include intmystrcmp const char str1,const char str2 int tmp 0 while tmp...

SQL SERVER 自定義函式

元宵節快樂 自定義函式分為兩類 一類為 標量函式,一類為表值函式。create funetion 函式名 引數 return 返回值資料型別 with as begin sql語句 必須有return 變數或值 end 一 內聯 值函式 create function 函式名 引數 returns ...