自定義函數(shù)
用戶定義自定義函數(shù)像內(nèi)置函數(shù)一樣返回標(biāo)量值,也可以將結(jié)果集用表格變量返回
用戶自定義函數(shù)的類型:
標(biāo)量函數(shù): 返回一個(gè)標(biāo)量值
表格值函數(shù){ 內(nèi)聯(lián)表格值函數(shù)、多表格值函數(shù)}: 返回行集(即返回多個(gè)值)
1 、標(biāo)量函數(shù)
Create function 函數(shù)名(參數(shù))
Returns 返回值數(shù)據(jù)類型
[with {Encryption | Schemabinding }]
[as]
begin
SQL 語句( 必須有return 變量或值)
End
Schemabinding : 將函數(shù)綁定到它引用的對(duì)象上(注:函數(shù)一旦綁定,則不能刪除、修改,除非刪除綁定)
Create function AvgResult(@scode varchar(10))
Returns real
As
Begin
?? Declare @avg real
?? Declare @code varchar(11)
?? Set @code=@scode + ‘%’
?? Select @avg=avg(result) from LearnResult_baijiali
Where scode like @code
Return @avg
End
執(zhí)行用戶自定義函數(shù)
select 用戶名。函數(shù)名 as 字段別名
select dbo.AvgResult(‘s0002’) as result
用戶自定義函數(shù)返回值可放到局部變量中,用set ,select,exec 賦值
declare @avg1 real ,@avg2 real ,@avg3 real
select @avg1= dbo.AvgResult(‘s0002’)
set @avg2= dbo.AvgResult(‘s0002’)
exec @avg3= dbo.AvgResult ‘s0002’
select @avg1 as avg1 ,@avg2 as avg2 ,@avg3 as avg3
函數(shù)引用
create function code(@scode varchar(10))
returns varchar(10)
as
begin
declare @ccode varchar(10)
set @scode = @scode + ‘%’
select @ccode=ccode from cmessage
?? where ccode like @scode
return @ccode
end
select name from class where ccode = dbo.code(‘c001’)
2 、表格值函數(shù)
a、 內(nèi)聯(lián)表格值函數(shù)
格式:
create function 函數(shù)名(參數(shù))
returns table
[with {Encryption | Schemabinding }]
as
return( 一條SQL 語句)
create function tabcmess(@code varchar(10))
returns table
as
return(select ccode,scode from cmessage where ccode like @ccode)
b、 多句表格值函數(shù)
?? create function 函數(shù)名(參數(shù))
?? returns 表格變量名table ( 表格變量定義)
?? [with {Encryption | Schemabinding }]
as
?? begin
??? SQL 語句
?? end
多句表格值函數(shù)包含多條SQL 語句,至少有一條在表格變量中填上數(shù)據(jù)值
表格變量格式
returns @ 變量名 table (column 定義| 約束定義 [,…])
對(duì)表格變量中的行可執(zhí)行select,insert,update,delete , 但select into 和 insert 語句的結(jié)果集是從存儲(chǔ)過程插入。
Create function tabcmessalot (@code varchar(10))
Returns @ctable table(code varchar(10) null,cname varchar(100) null)
As
Begin
Insert @ctable
Select ccode,explain from cmessage
Where scode like @code
return
End
Select * from tabcmessalot(‘s0003’)
將存儲(chǔ)過程轉(zhuǎn)變成函數(shù) ,參閱聯(lián)機(jī)幫助
?
轉(zhuǎn)自 http://hi.baidu.com/datachina/blog/item/801def0366c4e7ea09fa9344.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
