sqlserver自定义函数的创建与调用
sqlserver中有系统提供的函数,像avg、sum、getdate()等,用户还可以自定义函数。
用户自定义的函数包括:标量函数和表值函数,其中标量函数和系统函数的用法一样,表值函数根据主体的定义方式又可分为内嵌函数和多语句函数。
下面一一介绍语法。
标量函数:
Create function 函数名(参数)
Returns 返回值数据类型
[with {Encryption | Schemabinding }]
[as]
begin
SQL语句(return变量)
End
注:Schemabinding将函数绑定到它引用的对象上(注:函数一旦绑定,则不能删除、修改,除非删除绑定)
表值函数-内嵌函数:
create function 函数名(参数)
returns table
[with {Encryption | Schemabinding }]
as
return(一条SQL语句)
表值函数-多语句函数:
create function 函数名(参数)
returns 表变量名 table (表变量定义)
[with {Encryption | Schemabinding }]
as
begin
SQL语句
end
下面介绍使用方法,使用前先创建几个表用于测试,表如下:
CREATE TABLE [dbo].[Classes](
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[ClassName] [nvarchar](50) NOT NULL,
[CreateTime] [datetime] NOT NULL
); CREATE TABLE [dbo].[Students](
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[Name] [nvarchar](50) NOT NULL,
[ClassId] [int] NOT NULL,
[Age] [int] NOT NULL,
[CreateTime] [datetime] NOT NULL
); CREATE TABLE [dbo].[Courses](
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[Name] [nvarchar](50) NOT NULL,
[Credit] [float] NOT NULL
); CREATE TABLE [dbo].[StuScores](
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[StuId] [int] NOT NULL,
[CourseId] [int] NOT NULL,
[Score] [int] NOT NULL
);
例子如下:
--标量函数:返回某个班级的人数
create function F_GetSomeClassStuCount(@classId int)
returns int
as
begin
declare @rtnCount int
select @rtnCount=count(*) from Students where ClassId=@classId
return @rtnCount
end; select dbo.F_GetSomeClassStuCount(1); --表值函数-内嵌函数:返回某个班级的人员信息 注意此处不需begin-end包裹
create function F_GetSomeClassStruInfo(@classId int)
returns table
as
return (select * from Students where ClassId=@classId); select * from dbo.F_GetSomeClassStruInfo(1); --表值函数-多语句函数:返回某个学生的成绩
create function F_GetSomStuScore(@stuName nvarchar(50))
returns @tmpTb table(
StuName nvarchar(50),
CourseName nvarchar(50),
Score int
)
as
begin
insert into @tmpTb
select s.Name as StuName,c.Name as CourseName,ss.Score
from StuScores ss
left join Students s on ss.StuId=s.ID
left join Courses c on ss.CourseId=c.ID
where s.Name=@stuName
return
end; select * from F_GetSomStuScore('杨过')
sqlserver自定义函数的创建与调用的更多相关文章
- SQLServer自定义函数简单演示
CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ][ type_schema_name. ] par ...
- Sqlserver自定义函数Function
一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的: ...
- sqlserver自定义函数【粘】
用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函数.多表格值函数}:返回行集(即返回多个值) 1. ...
- MySQL 存储函数的创建、调用、查找
MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数 1.创建存储函数:使用 create function关键字 2.调用存储函数: 3.示例: ...
- sqlserver自定义函数与存储过程的区别 实例详解
分享下sql server自定义函数与存储过程的区别,一起来学习下. 一.自定义函数: 1. 可以返回表变量 2. 限制颇多,包括 不能使用output参数: 不能用临时表: 函数内部的操作不能影响到 ...
- sql自定义函数及C#中调用
1.在C#中调用sql自定义函数 1.1 标量值函数 sql语句调用 select dbo.GetClassIDWithName(1) string strSql = string.Format(& ...
- sqlserver自定义函数(标量值函数,表值函数)
用户自定义的函数有两类:表值函数.标量值函数. 表值函数:返回值是数据表的函数 调用方式 select b.* from tableA a accross apply Fun_BiaoZhiFun ...
- SqlServer自定义函数Function中调用with as
SET QUOTED_IDENTIFIER ON 标识符可以由双引号分隔,而文字必须由单引号分隔 SET QUOTED_IDENTIFIER OFF 标识符不可加引号,且必须遵守所有 Transact ...
- oracle 函数的创建和调用
以下已经测试通过 创建函数: create or replace function get_annual_sal(in_name varchar2) return number is annual_s ...
随机推荐
- 项目评价及第五周PSP的发布
5TH 各组作品ALPHA发布体会 1:俄罗斯方块组做了主要功能,这个项目我自己原来拿c语言做过一部分,感觉此游戏细节特别多,逻辑思维需要组织,以为我的水准来说,感觉做的挺好的. ...
- MyScript 手写识别数学公式、图形 自动计算
项目的地址 http://git.oschina.net/bimingcong/MyScript #说明:MyScript是一种能够自动识别用户在屏幕上的手势,然后转化为相应的数学公式.图形(比如三 ...
- hdu 5666 (大数乘法) Segment
题目:这里 题意:在线段x+y=q与坐标轴围成的三角形中,求有多少个坐标为整数的点,答案模上p. 很容易就想到最后答案就是((q-1)*(q-2))/2然后模上p就是了,但是这个数字比较大,相乘会爆l ...
- 問題排查:建立選單時的錯誤 errcode:65318,errmsg:must use utf-8 charset hint: [Vwda70520vr18]
目前已知:程式存檔時,將檔案編碼格式設定成 UTF-8 即可. 筆者使用的文字編輯器為 Editplus 3.51,檔案編碼格式很多帶 UTF8.Unicode 字眼的選項,選 UTF-8 即可.
- 在用到select2时,临时抱佛脚学习了一下
$('#e3').select2({ placeholder: "请输入", minimumInputLength: 1, separator: ",", // ...
- BestCoder Round #87 1001
GCD is Funny Accepts: 524 Submissions: 1147 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 655 ...
- 【区间dp】codevs1966 乘法游戏
f(i,j)=min{f(i,k)+f(k,j)+a[i]*a[k]*a[j]}(1<=i<=j<=n,i<k<j) #include<cstdio> #in ...
- VMware12 安装 CentOS 6.5 64位
前言:本人在配置Hadoop的过程中,需要搭建Cent OS 64 环境,借此,顺便将Cent OS 64 的安装在此记录,方便自己,也方便大家学习.本次是在VM12虚拟机中实现Cent OS 64 ...
- SWAP空间不足,如何进行添加
交换分区值过小,可以有两种方法来增加swap分区,一种是将新的分区来作为swap,另一种是在磁盘中创建一个大的文件来作swap. 我们以文件扩展swap [root@xuegod63 ~]# cd / ...
- SQL Server 事务语法
事务全部是关于原子性的.原子性的概念是指可以把一些事情当做一个单元来看待.从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合. 为了理解事务的概念,需要能够定义非常明确的边界. ...