我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 数据库 > SQL Server > 深度发掘SQLServer2000UDF(上)
热门文章排行
热门文章排行 Oracle的客户端工具--sql*plus(二(10-18)
如何将Access和Excel导入到Mysql中之(11-16)
用SQL进行函数查询(12-15)
Oracle 9i 数据库WITH查询语法小议(12-15)
优化Oracle库表设计的若干方法(12-15)
精采文章排行
精采文章排行 用代码打开Access文件的两种方法(11-17)
SQL Server 2000企业版安装教程(1)(11-16)
SQL数据操作基础(初级1)(11-16)
SQL数据操作基础(中级1)(11-16)
mssql 数据库的备份与恢复(11-16)
技术专题推荐
网管论坛交流
 

深度发掘SQLServer2000UDF(上) 

作者:佚名   来源:Linux 宝库   点击:   日期:2006-12-15


-->


  本文将介绍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
  
  CREATE FUNCTION dbo.Least
  
  -- Return the minimum 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
  







文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Oracle数据库的安全策略分析(三) ·Oracle数据库的安全策略分析(二)
·SCO unix 下定时备份 Oracle dmp 文件 ·Oracle 9i密码策略--密码重用规则
·Oracle SQL 内置函数的使用方法及结果 ·WindowsXP下安装Oracle9i问题二则

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。