问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql server 中的自定义函数应该如何调用?

发布网友 发布时间:2022-04-30 06:41

我来回答

4个回答

懂视网 时间:2022-04-30 11:03

Create function 函数名(参数) 2 Returns 返回值数据类型 3 [with {Encryption | Schemabinding }] 4 [as] 5 begin 6 SQL语句(return变量) 7 End 8 注:Schemabinding将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定) View Code

表值函数-内嵌函数:

技术分享
1 create function 函数名(参数)
2 returns table 
3 [with {Encryption | Schemabinding }]
4 as 
5 return(一条SQL语句)
View Code

表值函数-多语句函数:

技术分享
1 create function 函数名(参数)
2 returns 表变量名 table (表变量定义)
3 [with {Encryption | Schemabinding }]
4 as 
5 begin
6  SQL语句
7 end 
View Code

下面介绍使用方法,使用前先创建几个表用于测试,表如下:

技术分享
 1 CREATE TABLE [dbo].[Classes](
 2 [ID] [int] IDENTITY(1,1) NOT NULL primary key,
 3 [ClassName] [nvarchar](50) NOT NULL,
 4 [CreateTime] [datetime] NOT NULL
 5  );
 6 
 7 CREATE TABLE [dbo].[Students](
 8 [ID] [int] IDENTITY(1,1) NOT NULL primary key,
 9 [Name] [nvarchar](50) NOT NULL,
10 [ClassId] [int] NOT NULL,
11 [Age] [int] NOT NULL,
12 [CreateTime] [datetime] NOT NULL
13  );
14 
15 CREATE TABLE [dbo].[Courses](
16 [ID] [int] IDENTITY(1,1) NOT NULL primary key,
17 [Name] [nvarchar](50) NOT NULL,
18 [Credit] [float] NOT NULL
19  );
20 
21 CREATE TABLE [dbo].[StuScores](
22 [ID] [int] IDENTITY(1,1) NOT NULL primary key,
23 [StuId] [int] NOT NULL,
24 [CourseId] [int] NOT NULL,
25 [Score] [int] NOT NULL
26 );
View Code

例子如下:

技术分享
 1 --标量函数:返回某个班级的人数
 2 create function F_GetSomeClassStuCount(@classId int)
 3 returns int
 4 as
 5 begin
 6 declare @rtnCount int
 7 select @rtnCount=count(*) from Students where ClassId=@classId
 8 return @rtnCount
 9 end;
10 
11 select dbo.F_GetSomeClassStuCount(1);
12 
13 --表值函数-内嵌函数:返回某个班级的人员信息 注意此处不需begin-end包裹
14 create function F_GetSomeClassStruInfo(@classId int)
15 returns table
16 as 
17 return (select * from Students where ClassId=@classId);
18 
19 select * from dbo.F_GetSomeClassStruInfo(1);
20 
21 --表值函数-多语句函数:返回某个学生的成绩
22 create function F_GetSomStuScore(@stuName nvarchar(50))
23 returns @tmpTb table(
24 StuName nvarchar(50),
25 CourseName nvarchar(50),
26 Score int
27 )
28 as
29 begin
30 insert into @tmpTb
31 select s.Name as StuName,c.Name as CourseName,ss.Score
32 from StuScores ss
33 left join Students s on ss.StuId=s.ID
34 left join Courses c on ss.CourseId=c.ID
35 where s.Name=@stuName
36 return
37 end;
38 
39 select * from F_GetSomStuScore(‘杨过‘)
View Code


 

sqlserver自定义函数的创建与调用

标签:

热心网友 时间:2022-04-30 08:11

直接用就行了吧,select get_supinfo('contentABC', 'tableCDE')

热心网友 时间:2022-04-30 09:29

select dbo. get_supinfo('content ','table')

热心网友 时间:2022-04-30 11:03

自定义函数

用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回
用户自定义函数的类型:
标量函数:返回一个标量值
表格值函数{内联表格值函数、多表格值函数}:返回行集(即返回多个值)

1、标量函数
Create function 函数名(参数)
Returns 返回值数据类型
[with {Encryption | Schemabinding }]
[as]
begin
SQL语句(必须有return 变量或值)

End

Schemabinding :将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定)

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_jiali
Where scode like @code
Return @avg
End

执行用户自定义函数
select 用户名。函数名 as 字段别名
select dbo.AvgResult(‘s0002’) as result

用户自定义函数返回值可放到局部变量中,用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

函数引用

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、表格值函数
a、 内联表格值函数
格式:
create function 函数名(参数)
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、 多句表格值函数
create function 函数名(参数)
returns 表格变量名table (表格变量定义)
[with {Encryption | Schemabinding }]
as
begin
SQL语句
end

多句表格值函数包含多条SQL语句,至少有一条在表格变量中填上数据值
表格变量格式
returns @变量名 table (column 定义| 约束定义 [,…])
对表格变量中的行可执行select,insert,update,delete , 但select into 和 insert 语句的结果集是从存储过程插入。

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’)

来自:http://hi.baidu.com/datachina/blog/item/801def0366c4e7ea09fa9344.html
下面是我从别的地方弄的一个例子,浅显易懂:
编写一个函数,该函数,可以通过输入借书时间来判断是否到期,当借阅时间大于30天,返回已经过期;否则返回还未到期。
CREATE FUNCTION IsDateout(@BDate datetime)
returns nvarchar(20)
AS
BEGIN
DECLARE @myresult nvarchar(20)
IF (datediff(day,@BDate,getdate())>30)
BEGIN
SET @myresult='已过期'
end
else
begin
set @myresult='未到期'
end
RETURN (@myresult)
END

SELECT dbo.IsDateout(cast('2009-12-17' AS datetime))--结果已过期
SELECT dbo.IsDateout(cast('2010-12-17' AS datetime))--结果未到期
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
房贷批下来多久过户 房贷过审后需要多久办理过户手续? 房贷成功后有什么手续 isnt后面加什么 ...导航,都支持什么样的视频格式,我用内存卡下载了不少电影都不能看... MM们。你们对富二代跟穷二代 是怎么看的? 《几回魂梦与君同》(火影-草稿版)电子书txt全集下载 几回魂梦与君同在的txt全集下载地址 几回魂梦与君同的txt全集下载地址 代州黄酒和其他黄酒生产上有什么不同之处? 腰痛,坐着就腰痛,站起来的时候很痛直不起来,要走动会才会好起来,有时候... pubg手游怎么更新 放了很长时间的肉还能吃吗 pubg体验服新用户怎么下载地铁 PUBG怎么下载? 微信如何删掉对方手机里和自己的聊天记录?怎样删除对方手机里和自己聊天内容?_百度问一问 iPhone5s自带的浏览器,为什么这样一片空白,以前按主页还有百度,苹果之类的图标,而现在。。。 苹果5s浏览器列表空白了怎么回事? 苹果手机自带的浏览器百度打开了,但是进去一片空白,用uc显示一群英文字母一直跳什么情况? iphone6 plus自带浏览器打开一片空白,求大神帮忙解决 什么叫旧乐府诗? 中“古诗”“乐府”“律诗”“绝句”有什么区别 新乐府诗和汉乐府的异同 乐府诗,古风,歌行体和新乐府在形式上的区别。详细一点的。 如何区分古体诗 近体诗 新乐府诗 旧乐府诗 律诗 和歌行体呢? 乐府、新乐府、拟乐府的区别与联系? 如何申请退货 什么是"新乐府诗","旧题乐府诗"? 乐府旧题和新乐府怎么区别啊?简单区别一下。 超市新鲜鱼类包装方法 超市里卖的鱼罐头,都没有刺吗,或者是刺已经软化可以直接吃? 猪血肠的做法,猪血肠怎么做好吃,猪血肠的家常做法 猪血肠怎么做好吃,尖椒炒猪血肠的家常做法 猪血肠的制作过程 贵州猪血肠怎么做好吃 猪血肠怎样做菜的做法 猪血肠怎么做才滑 猪血肠怎么做好吃. 德保猪血肠做法 山羊和绵羊有什么区别 山羊和绵羊有什么区别/ 山羊头和绵羊头哪个肉比较多 绵羊和山羊有什么不同? 都说最好的投资是投资自己,那么该如何投资自己呢? 山羊和绵羊的有什么不同。 绵羊与山羊的区别 个人投资理财如何做? 人民币在银行很不划算,作为非专业人士,如何投资理财达到10%以上的年收益率? 绵羊与山羊有哪些区别? 如果吃羊头是吃山羊头好还是吃绵羊头好 我个人每月工资只有一千五我应该如何理财 山羊与绵羊的区别