• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

深度发掘SQL Server 2000 UDF(上)

发布: 2007-6-21 12:06 | 作者:   | 来源:   | 查看: 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

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网