使用者自定義函式可以像系統函式一樣在查詢或儲存過程中呼叫,可以接受引數、執行操作並將操作結果以值的形式返回。返回值可以是單個標量或結果集。
1. 標量函式
標量函式返回乙個確定型別的標量值,對於多語句的標量函式,定義在begin end塊中的函式體包含一系列返回單個值的t-sql語句。
建立標量函式語法結構:
createfunction
[schema_name.
]function_name ( [
[,...n ]]
)returns
return_data_type
[with [ ,...n ]]
[as
]begin
function_body
return
scalar_expression
end[
; ]
示例:
createfunction
[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語句查詢的結果。
建立錶值函式語法結構:
createfunction
[schema_name.
]function_name ( [
[,...n ]]
)returns
table
[with [ ,...n ]]
[as
]return[(
] select_stmt [) ]
[; ]
示例:
createfunction
[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包含起來的函式體。返回值的表中資料是由函式體中的語句插入的。多語句錶值函式可以進行多次查詢,對資料進行多次篩選與合併,彌補了錶值自定義函式的不足。
多語句錶值函式語法結構:
createfunction
[schema_name.
]function_name ( [
[,...n ]]
)returns
@return_variable
table
[with [ ,...n ]]
[as
]begin
function_body
return
end[
; ]
示例:
createfunction
[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. 刪除函式
dropfunction [
,...n
]
dropfunction
[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 ...