当前位置:
文档之家› 数据库 第14章 实现用户定义函数
数据库 第14章 实现用户定义函数
Copyright@2008
8
多语句表值函数定义
16.2.3 使用多语句表值函数
创建函数
CREATE FUNCTION [own_name.] function_name ([{ @参数名 [AS] 数据类型 [= 默认值]} [,...n]]) RETURNS @返回变量 TABLE <表定义> [WITH < 函数选项>] [AS] BEGIN 函数体 RETURN END
调用函数
SELECT * FROM dbo.fn_Employees('ShortName') SELECT * FROM dbo.fn_Employees('LongName') WHERE employeeid < 5
Copyright@2008 1
用户定义函数(续)
16.1 用户定义函数
多语句表值函数 返回一个由一条或多条 Transact-SQL 语句建立的表, 类似于存储过程 与存储过程不同的是,多语句表值函数可以在 SELECT 语句的 FROM 子句中被引用,仿佛视图一样 内嵌表值函数 返回一个表,该表是由一个位于RETURN子句中的 SELECT命令段从数据库中筛选出来的,类似于视图 相对于视图,内嵌表值函数可使用参数,提供了更强 的适应性,扩展了索引视图的功能
调用函数
可以省略
SELECT * from own_name.function_name [(参数值[,...n])] [ where <条件> ]
Copyright@2008
9
多语句表值函数示例
16.2.3 多语句表值函数示例
创建函数,根据要求返回ID及Lastname或 Lastname、firstname组合
调用函数
SELECT dbo.MyFun('business')
Copyright@2008 6
标量用户定义函数示例(续)
16.2.2 标量用户定义函数示例
创建标量函数MyScarlarFun,计算用户指定类图书 的当年销售额(带默认值) 。
USE pubs GO CREATE FUNCTION MyFun (@type char(12) = ‘business’) RETURNS money AS BEGIN DECLARE @var money SELECT @var = sum(price * ytd_sales) FROM titles WHERE type = @type RETURN @var END 不能省略
调用函数
必须指出所 有者名称
SELECT own_name.function_name [(参数值[,...n])]
Copyright@2008
5
标量用户定义函数示例
16.2.2 标量用户定义函数示例
创建标量函数MyScarlarFun,计算用户指定类图 书的当年销售额。
USE pubs GO CREATE FUNCTION MyFun (@type char(12)) RETURNS money AS BEGIN DECLARE @var money SELECT @var = sum(price * ytd_sales) FROM titles WHERE type = @type RETURN @var END
CREATE FUNCTION fn_Employees (@length nvarchar(10)) RETURNS @fn_Employees table (EmployeeID int PRIMARY KEY NOT NULL, EmployeeName nvarchar(20) NOT NULL) 表定义 AS BEGIN IF @length = 'ShortName' INSERT @fn_Employees SELECT EmployeeID, LastName FROM Employees ELSE IF @length = 'LongName' INSERT @fn_Employees SELECT EmployeeID, (FirstName + ' ' + LastName) FROM Employees RETURN END
Copyright@2008 2
第14章 实现用户定义函数
用户定义函数 用户定义函数的定义与使用 架构绑定函数的创建 推荐操作
Copyright@2008
3
创建标量用户定义函数
16.2.1 使用标量用户定义函数
标量函数返回 RETURNS 子句中定义的数据类型的 单个数据值 在 BEGIN … END 块之间定义了函数体,包含 返回值的一系列 Transact-SQL 语句
用户定义函数
16.1 用户定义函数
SQL Server 2000 允许用户设计自己的函数,以补充和扩 展系统提供(内置)函数的功能 用户定义函数采用零或多个输入参数并返回标量值或表 SQL Server 2000 支持三种用户定义函数: 标量函数、多语句表值函数、内嵌表值函数 标量函数 标量函数返回一个标量(单值)结果 返回值可为:Timestamp、Text、Ntext、Image、 Table和Cursor之外的所有数据类型,但不能为用户自 定义数据类型。
参数带 默认值
调用函数
SELECT dbo.MyFun(DEFAULT)
Copyright@2008 7
使用多语句表值函数
16.2.3 使用多语句表值函数
多语句表值函数
BEGIN ... END 限定了函数体 RETURNS 子句指定 table 作为返回的数据类型 RETURNS 子句定义了返回表的名字和格式。 返回变量名的使用域限定于函数局部
返回值可以是除了 text、ntext、image、cursor 或 timestamp 之外的任何数据类型
额外的限制
标量函数内的 SQL 语句不能包括任何非确定性 系统函数
Copyright@2008 4
标量用户函数定义
16.2.2 标量用户定义函数示例
创建函数
CREATE FUNCTION [own_name.] function_name ( [{ @参数名 [AS] 数据类型 [= 默认值]} [,...n] ]) RETURNS 返回数据类型 [WITH < 函数选项>] [AS] BEGIN 函数体 RETURN 返回表达式 END