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

sqlserver中有系统提供的函数,像avg、sum、getdate()等,用户还可以自定义函数。

用户自定义的函数包括:标量函数和表值函数,其中标量函数和系统函数的用法一样,表值函数根据主体的定义方式又可分为内嵌函数和多语句函数。

下面一一介绍语法。

标量函数:

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

表值函数-内嵌函数:

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

表值函数-多语句函数:

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

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

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

例子如下:

 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(‘杨过‘)

时间: 2024-10-25 07:35:17

sqlserver自定义函数的创建与调用的相关文章

关于自定义函数的创建和调用

Create function AvgResult(@scode varchar(10)) Returns real As Begin Declare @avg real set @avg='1.2'; Return @avg End 调用方法: select dbo.AvgResult('s0002') as result

Sqlserver自定义函数Function

一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的:                                        a, CREATE FUNCTION F_NAME(传入的参数名称    传入参数的类型)                                        b,RETURNS         返回值类型                 

sqlserver自定义函数与存储过程的区别 实例详解

分享下sql server自定义函数与存储过程的区别,一起来学习下. 一.自定义函数: 1. 可以返回表变量 2. 限制颇多,包括 不能使用output参数: 不能用临时表: 函数内部的操作不能影响到外部环境: 不能通过select返回结果集: 不能update,delete,数据库表: 3. 必须return 一个标量值或表变量 自定义函数一般用在复用度高,功能简单单一,争对性强的地方.二.存储过程 1. 不能返回表变量 2. 限制少,可以执行对数据库表的操作,可以返回数据集 3. 可以ret

sql自定义函数及C#中调用

1.在C#中调用sql自定义函数 1.1 标量值函数 sql语句调用 select  dbo.GetClassIDWithName(1) string strSql = string.Format("select dbo.GetClassIDWithName('{0}')",dtTime);DataTable dt = DB_Contrast.DB.OleDbHelper.GetDataTable(strSql); 1.2 表值函数 sql语句调用 select * from GetA

SqlServer自定义函数Function中调用with as

SET QUOTED_IDENTIFIER ON 标识符可以由双引号分隔,而文字必须由单引号分隔 SET QUOTED_IDENTIFIER OFF 标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则. SET NOCOUNT ON --返回受影响的行数 SET DATEFIRST 1 --定义日期周一开始 SET ANSI_NULLS ON 在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE 如果 ColumnA 包含 Null 值,则 ColumnA = N

sqlserver自定义函数

标量函数 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 语法 Create function 函数名(参数) Returns 返回值数据类型 [with {Encryption | Schemabinding }] [as] begin SQL语句(必须有return 变量或值) End 释义: with 子句指出了创建函数的选项,如果指出了 encryption 参数,则创建的函数是被加密的,函数定义的文本将以不可读的形式存储在 syscomments 表中,任何人都不能查看

关于函数的创建和调用

定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":". def 是固定的,不能变,必须是连续的def三个字母,不能分开...它们要相亲相爱的在一起. 空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格.3格或者你想空多少都行,但正常人还是空1格. 函数名:函数名只能包含字符串.下划线和数字且不能以数字开头.虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能 括号:是必须加的,先别问为啥要有括号,总之加上括号就对了! 小结

函数的创建及调用

================================

js中函数的创建和调用都发生了什么?执行环境,函数作用域链,变量对象

博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/26/js%E4%B8%AD%E5%87%BD%E6%95%B0%E7%9A%84%E5%88%9B%E5%BB%BA%E5%92%8C%E8%B0%83%E7%94%A8%E9%83%BD%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F%E6%89%A7%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%B