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

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

  1. SQLServer自定义函数简单演示

    CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ][ type_schema_name. ] par ...

  2. Sqlserver自定义函数Function

    一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的:                ...

  3. sqlserver自定义函数【粘】

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

  4. MySQL 存储函数的创建、调用、查找

    MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数 1.创建存储函数:使用 create function关键字 2.调用存储函数: 3.示例: ...

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

    分享下sql server自定义函数与存储过程的区别,一起来学习下. 一.自定义函数: 1. 可以返回表变量 2. 限制颇多,包括 不能使用output参数: 不能用临时表: 函数内部的操作不能影响到 ...

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

    1.在C#中调用sql自定义函数 1.1 标量值函数 sql语句调用 select  dbo.GetClassIDWithName(1) string strSql = string.Format(& ...

  7. sqlserver自定义函数(标量值函数,表值函数)

    用户自定义的函数有两类:表值函数.标量值函数. 表值函数:返回值是数据表的函数 调用方式 select  b.*  from tableA a accross apply Fun_BiaoZhiFun ...

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

    SET QUOTED_IDENTIFIER ON 标识符可以由双引号分隔,而文字必须由单引号分隔 SET QUOTED_IDENTIFIER OFF 标识符不可加引号,且必须遵守所有 Transact ...

  9. oracle 函数的创建和调用

    以下已经测试通过 创建函数: create or replace function get_annual_sal(in_name varchar2) return number is annual_s ...

随机推荐

  1. LINK : fatal error LNK1104: 无法打开文件“gtestd.lib”

    解决办法: 复制编译出来的gtestd.lib文件到D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib目录下 我这里用的是vs2015 ...

  2. IOS单例模式要做到3点

    1,永远只分配一块内存来创建对象. +(instanst) static id instace = nil; static dispatch_once_t onceToken; dispatch_on ...

  3. Delphi inline编译器优化问题

    function Test():Integer; inline; var P:Pointer; begin FreeMem(P); Result := AtomicIncrement(__gr); / ...

  4. PowerDesigner 建模

    File—New Model—Physical Data Model—Physical Diagram—Model name设置为test,DBMS属性设置为Microsoft SQL Server  ...

  5. sublim text3 配置

    喜欢用sublime,但每次换环境都要重新百度下配置,太麻烦,故在此把自己喜欢的配置记录下来 sublime text2 可以直接在设置里改,但sublime text3不能直接在设置中改值,只能在s ...

  6. nodejs: C++扩展

    Nodejs的C++扩展首先保证nodejs和v8都正确安装 下载NodeJS源码,我的放在D盘. NodeJS的C++扩展要用VS2010开发,新建一个空的Win32控制台项目,右键——属性,在常规 ...

  7. ThinkPHP提交表单判断上传图片经验总结

    在用TP框架开发程序处理接收到的表单的时候,要判断<input type="file" name="img">是否有上传图片,来决定是否要将对应的图 ...

  8. 深入浅出话VC++(1)——Windows程序内部运行机制

    一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...

  9. C++ map使用(基于hashtable)

    C++ map使用(基于hashtable) 实际上基于hashtable的map有两种一种是hash_map,unordered_map,但是最好使用后者,原因如下[1] 因为标准化的推进,unor ...

  10. utime函数

    utime函数:对一个文件的访问和修改时间 #include <utime.h> int utime( const char *pathname, const struct utimbuf ...