SQL Server 的三种自定义函数(用户定义的函数)

“自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。

SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值。

自定义函数分为:标量值函数或表值函数

如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。 如果 RETURNS 子句指定 TABLE,则函数为表值函数。

表值函数又可分为:内嵌表值函数(行内函数)或多语句函数

如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。 如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。

标量值函数示例

CREATE FUNCTION dbo.Foo()

RETURNS int

AS

BEGIN

declare @n int

select @n=3

return @n

END

内嵌表值函数示例

CREATE FUNCTION dbo.Foo()

RETURNS TABLE

AS

return select id, title from msgs

内嵌表值函数只有一个 select 语句。

多语句表值函数示例(部分)

CREATE FUNCTION fn_FindReports (@InEmpId nchar(5))

RETURNS @retFindReports TABLE (empid nchar(5) primary key,

empname nvarchar(50) NOT NULL,

mgrid nchar(5),

title nvarchar(30))

...

注意其 RETURNS 部分。

多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。

赋值语句。 控制流语句。 DECLARE 语句,该语句定义函数局部的数据变量和游标。 SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。 INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。 EXECUTE 语句调用扩展存储过程。

“自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。

SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值。

自定义函数分为:标量值函数或表值函数

如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。 如果 RETURNS 子句指定 TABLE,则函数为表值函数。

表值函数又可分为:内嵌表值函数(行内函数)或多语句函数

如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。 如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。

标量值函数示例

CREATE FUNCTION dbo.Foo()

RETURNS int

AS

BEGIN

declare @n int

select @n=3

return @n

END

内嵌表值函数示例

CREATE FUNCTION dbo.Foo()

RETURNS TABLE

AS

return select id, title from msgs

内嵌表值函数只有一个 select 语句。

多语句表值函数示例(部分)

CREATE FUNCTION fn_FindReports (@InEmpId nchar(5))

RETURNS @retFindReports TABLE (empid nchar(5) primary key,

empname nvarchar(50) NOT NULL,

mgrid nchar(5),

title nvarchar(30))

...

注意其 RETURNS 部分。

多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。

赋值语句。 控制流语句。 DECLARE 语句,该语句定义函数局部的数据变量和游标。 SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。 INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。 EXECUTE 语句调用扩展存储过程。


相关内容

  • 餐饮管理系统分析
  • 餐饮企业管理系统的设计与实现 所在院(系) : 学 生: 指导教师: 研究起止日期: 摘 要 随着我国经济的快速发展,人民生活水平日益提高,餐饮消费需求越来越高,餐饮业突飞猛进.但与此同时,其所面临的竞争也越来越激烈.餐饮业要想在白热化的竞争环境下生存,就必须运用科学的管理思想与先进的管理方法,使点 ...

  • [数据库基础与应用]形成作业答案
  • <数据库基础与应用>形成性作业 第一次作业 一.单项选择题 1.域是实体中相应属性的(A ). A .取值范围 B .值 C .名称 D .描述 2.把保存关系定义的关系称为对应数据库的(B ). A .一般关系 B .元关系 C .特定关系 D .正常关系 3.在一个关系R 中,若存在 ...

  • 数据库应用技术考试知识点
  • 第二章 系统数据类型介绍p24 创建用户自定义数据类型: sp_addtype type_name , phystype[(length)|([precision,scale]),null | not null | identity] 查看,重命名,删除用户定义的数据类型: sp_help type ...

  • 数据库基础概念
  • 第一章 数据库技术概论 数据库(Database ,DB )是存储在计算机内.有组织的.可共享的数据集合.数据库中的数据按一定的数据模型进行组织和描述,具有较小的冗余度.较高的数据易扩展性和独立性,并可为多个用户所共享. 数据库管理系统(Database Management Sys,DBMS )是 ...

  • 软件项目开发管理系统
  • 软件项目开发管理系统 摘 要 软件项目开发管理系统在相关企业进行生产的管理中有着广泛的应用,它有利于提高企业对软件项目开发过程中的信息管理.系统研究的目的.意义.现状和发展趋势都有所说明. 这里设计的系统所要实现的功能包括测试管理功能.验收管理功能.文档管理功能和用户管理功能.为了实现系统的各项信息 ...

  • 数据库原理与应用教程-期末测试题
  • 数据库原理与应用教程 期末测试题(一) 一. 填空题(每空1分,共10分) 1.数据库系统的核心是. 2.在关系模型中,实体以及实体间的联系都是用______来表示的. 3.设关系模型R(A,B ,C) ,F 是R 上的函数依赖集,F={A→B,C→B},则R 的候选码为_________. 4.层 ...

  • 数据库实验指导书2015 (1)
  • <数据库概论>实验指导书 中北大学 软件学院 2015/3/31 <数据库概论>实验 实验类别: 课内实验 实验课程名称: 数据库概论 实验室名称:软件工程实验室 实验课程编号: 总学时: 56 学 分: 适用专业: 软件工程 先修课程: 离散数学.计算机导论.数据结构与算法 ...

  • 2013三级数据库技术真题
  • 三级数据库技术真题2013年03月 一.选择题 下列各题A .B .C .D 四个选项中,只有一个选项是正确的. 1.下列有关数据库系统及相关内容的说法中,错误的是__D____. A.数据库系统是由计算机软硬件组成的复杂系统,其体系结构与系统硬件平台密切相关 B.数据库管理系统提供了查询.插入.删 ...

  • 电大试卷-数据库基础与应用汇总
  • 数据库基础与应用期末复习题(归纳整理) 一.填空题 1.Access "表"结构设计窗口分为两个部分,上半部分是 表设计器 ,下半部分是 字段属性 . 2.Access "表"结构设计窗口中上半部分的"表设计器"是由 字段名称 . 数据类型 ...