知识大全 UDF—MSQL Server 2000的新特性

Posted 函数

篇首语:你若无书相伴,便没了长相伴。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 UDF—MSQL Server 2000的新特性相关的知识,希望对你有一定的参考价值。

UDF—MSQL Server 2000的新特性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

       本文将介绍Microsoft SQL Server 的新增特性—用户自定义函数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可以带有 个到 个参数 每个参数可以是除了timestamp cursor table 以外所有的数据类型 函数返回值的限制要更多一些 它不可以是text ntext image timestamp cursor和table     函数体是UDF的主要部分 它有两个选项: ENCRYOTION和 SCHEMABINDING     SCHEMABINDING是SQL Server 的新增功能 可以和视图一同使用 该选项不允许删除和修改被该函数引用的对象 这样可以防止无效的函数和视图对它们引用的对象进行结构上的修改     大家会注意到函数体以Begin开始 End结束 这一点不同于创建存储过程 触发器和视图 当您忘了写上Begin/End时 系统会返回一个提示信息 Incorrect syntax near RETURN 为什么不直接说少了Begin/End 这有点让人费解     下面我用几个例子来说明UDF的应用     Greatest and Least     为了区别于系统函数Max和Min 我给新函数命名为Greatest和Least 它们会从以参数形式输入的两个值中找出最大值和最小值     Case语句是两个函数的核心     CASE WHEN value > value THEN value ELSE value END     虽然函数很简单 但用途是很广的     CREATE FUNCTION dbo Greatest      Return the maximum of o parameters     (@Val SQL_VARIANT     @Val SQL_VARIANT)     RETURNS SQL_VARIANT     AS     BEGIN     RETURN (CASE WHEN @val > @val THEN @val ELSE @val END)     END     go     ―――――――――――――――――――――――――――――――       CREATE FUNCTION dbo Least      Return the minimum of o parameters     ( @val SQL_VARIANT     @val SQL_VARIANT )     RETURNS SQL_VARIANT     AS     BEGIN     RETURN (CASE WHEN @val < @val THEN @val ELSE @val END)     END     Go     大小写转换函数     该函数有两个参数 @String和@Capitalize_What     依据 @Capitalize_What的值 函数有不同的功能     ¨ @Capitalize_What = string     函数将 @string的第一个非空字符转换成大写 其余部分改为小写     ¨ @Capitalize_What = sentence     函数将 @string中的每一句的首个非空字符转换为大写 句子其余部分转换为小写 断句的依据是 ! ?     ¨ @Capitalize_What = word     函数将 @string中的每个词都转换成首字符大写 其余小写的形式     CREATE FUNCTION dbo Capitalize (      Capitalize the first character of every word      sentence or the whole string Put the rest to lowercase     @String VARCHAR ( )     @Capitalize_What VARCHAR ( ) = string      String: Capitalize the first letter of the string        Sentence: Capitalize the first letter of every sentence      Delimiters: /!/?        Word: Capitalize the first letter of every word      Delimiters: any characters other than letters and digits     )     RETURNS VARCHAR( )     AS     BEGIN     DECLARE @Position SMALLINT     @Char CHAR( )     @First_Char CHAR ( )     @Word_Start SMALLINT       SET @Capitalize_What = LOWER( @Capitalize_What )     SET @Word_Start =     IF @Capitalize_What IN ( word sentence )     BEGIN     SET @Position = DATALENGTH( @String )     WHILE @Position >= BEGIN     SET @Char = CASE @Position     WHEN THEN     ELSE UPPER( SUBSTRING(     @String @Position      ) )     END     IF @Char BEEEN A AND Z     OR @Char BEEEN and BEGIN     SET @Word_Start = @Position     SET @First_Char = UPPER( @Char )     END     ELSE BEGIN     IF @Capitalize_What = word     OR @Char in ( ! ? ) BEGIN     IF @Word_Start >     AND @First_Char BEEEN A     AND Z     SET @String = STUFF(     @String @Word_Start      @First_Char )     SET @Word_Start =     END     END     SET @Position = @Position     END     END     ELSE BEGIN Capitalize the first character     SET @Position =     WHILE @Position < DATALENGTH( @String )     BEGIN     SET @Position = @Position +     SET @Char = UPPER( SUBSTRING( @String     @Position ) )     IF @Char BEEEN A AND Z     OR @Char BEEEN AND BEGIN     SET @String = STUFF( @String     @Position @Char )     SET @Position =     END     END     END     RETURN( @String )     END     go     小结     SQL Server 的 UDF的应用是很广泛的 它会给编程人员带来极大的便利 您可以建立自己的 system UDF 存在Master数据库中 可以为任何数据库进行调用     UDF也有不足 我们知道系统函数可以任意调有 不管您使用大写 小写或者大小写混合 UDF却不行 它是大小写敏感的     在未来的版本中 我希望微软为UDF增加默认值的功能 以后我们可以这样定义一个函数     CREAT FUNCTION dbo Test_default     ( @parm int = )     RETURN INT     AS     BEGIN     RETURN ( @parm )     END       UDF中诸如此类的小问题还有不少 希望UDF的功能越来越强大 我们编程人员工作起来就会越来越轻松 cha138/Article/program/SQLServer/201311/22014

相关参考

知识大全 SQL Server 2000的新特性[1]

MSSQL基础教程:SQLServer2000的新特性[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 SQL Server 2000的新特性[4]

MSSQL基础教程:SQLServer2000的新特性[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 SQL Server 2000的新特性[3]

MSSQL基础教程:SQLServer2000的新特性[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 SQL Server 2000的新特性[2]

MSSQL基础教程:SQLServer2000的新特性[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 SQL Server 2000的新特色

SQLServer2000的新特色  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  新的数据类型 

知识大全 SQL Server 2005 SP1的新特性

SQLServer2005SP1的新特性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQLS

知识大全 SQL Server2012对于开发人员用的上的新特性

SQLServer2012对于开发人员用的上的新特性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server 2005和SQL Server 2000数据的相互导入

SQLServer2005和SQLServer2000数据的相互导入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 SQL Server 2000问答

SQLServer2000问答  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问SQLServe

知识大全 通过 Perl 存取 mSQL 和 MySQL 的内容

通过Perl存取mSQL和MySQL的内容  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  )知识