您的位置:首页 >> 学院 >> 技术开发 >> 数据库
UDF—SQL Server 2000的新特性
eNet学院 2003年6月16日15:47 程骏  

  本文将介绍Microsoft SQL Server 2000的新增特性—用户自定义函数User-Defined Function(UDF),并演示几个常用的实例。
  UDF的功能类似SQL Server中内建的系统函数,如CONVERT、SUBSTRING、 DATAADD、 GETDATA、ISNULL等等。一个UDF可以没有参数,或者带有一个或多个参数,函数运行后将会返回一个函数值。定义UDF的语法如下:

CREATE FUNCTION [ owner_name.] function_name

( { { @parameter_name scalar_parameter_data_type

[,…n] ] )

RETURN scalar_return_data_type

[WITH < function_option> [, … n]]

[AS]

BEGIN

Function_body

RETURN scalar_expression

END

每个UDF可以带有0个到1024个参数,每个参数可以是除了timestamp、cursor、table 以外所有的数据类型;函数返回值的限制要更多一些,它不可以是text、ntext、image、timestamp、cursor和table。

函数体是UDF的主要部分,它有两个选项: ENCRYOTION和 SCHEMABINDING。

SCHEMABINDING是SQL Server 2000的新增功能,可以和视图一同使用。该选项不允许删除和修改被该函数引用的对象。这样可以防止无效的函数和视图对它们引用的对象进行结构上的修改。

大家会注意到函数体以Begin开始,End结束。这一点不同于创建存储过程、触发器和视图。当您忘了写上Begin/End时,系统会返回一个提示信息“Incorrect syntax near ‘RETURN’”。为什么不直接说少了Begin/End,这有点让人费解。

下面我用几个例子来说明UDF的应用。

Greatest and Least

  为了区别于系统函数Max和Min,我给新函数命名为Greatest和Least,它们会从以参数形式输入的两个值中找出最大值和最小值。

Case语句是两个函数的核心:

CASE WHEN value1 > value2 THEN value1 ELSE value2 END

虽然函数很简单,但用途是很广的。

CREATE FUNCTION dbo.Greatest

-- Return the maximum of two parameters

(@Val1 SQL_VARIANT,

@Val2 SQL_VARIANT)

RETURNS SQL_VARIANT

AS

BEGIN

RETURN (CASE WHEN @val1 > @val2 THEN @val1 ELSE @val2 END)

END

go

―――――――――――――――――――――――――――――――

[下一页] [最后一页]

相关文章
快速搜索|详细搜索
学院导航
玩转电脑
软件教室
设计教室
开发教室
设计学院精彩专题