iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >SQL Server怎么创建用户定义函数
  • 383
分享到

SQL Server怎么创建用户定义函数

2023-06-30 15:06:22 383人浏览 安东尼
摘要

本文小编为大家详细介绍“sql Server怎么创建用户定义函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server怎么创建用户定义函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知

本文小编为大家详细介绍“sql Server怎么创建用户定义函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server怎么创建用户定义函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、UDF的定义

和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调用。

UDF和存储过程的主要区别在于返回结果的方式:

  • 使用UDF时可传入参数,但不可传出参数。输出参数的概念被更为健壮的返回值取代了。

  • 和系统函数一样,可以返回标量值,这个值的好处是它并不像在存储过程中那样只限于整形数据类型,而是可以返回大多数SQL Server数据类型。

UDF有以下两种类型:

  • 返回标量值的UDF。

  • 返回表的UDF。

SQL Server怎么创建用户定义函数

创建语法:

CREATE FUNCTioN [<schema name>.]<function name>([ <@parameter name> [AS] [<schema name>.]<data type> [= <default value> [READONLY]] [,...n] ])RETURNS { <Scalar type> | TABLE [(<table definition>)] }[ WITH [ENCRYPTION] | [SCHEMABINDING] | [RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ] |[EXECUTE AS {CALLER|SELF|OWNER|<'user name'>}][AS] { EXTERNAL NAME <externam method> |BEGIN[<function statements>]{RETURN <type as defined in RETURNS clause | RETURN (<SELECT statement>)}END}[;]

二、标量值函数:

这种类型的UDF和大多数SQL Server内置函数一样,会向调用脚本或存储过程返回标量值,像GETDATE()或USER()函数就会返回标量值。

UDF的返回值并不限于整数,而是可以返回除了BLOB、游标(cursor)和时间戳以外的任何有效的SQL Server数据类型(包括用户自定义类型)。

与存储过程不同,用户自定义函数返回值的目的是提供有意义的数据(而对于存储过程来说,返回值只能说明成功或失败,如果失败,则会提供一些关于失败性质的特定信息。)

可在查询中内联执行函数(如作为SELECT语句的一部分),而用存储过程则不行。

例1:应用在where语句中

CREATE FUNCTION DateOnly(@Date DateTime)  RETURNS varchar(12)AS  BEGIN      RETURN CONVERT(varchar(12),@Date,102)  END

然后试着,运用一下:

SELECT * FROM Nx_comment   WHERE dbo.DateOnly(com_posttime) = '2012.04.28'  --注意前面的dbo是必须的。

其实以上SQL语句相当于:

SELECT * FROM Nx_comment   WHERE CONVERT(varchar(12),com_posttime,102) = '2012.04.28'

例2:应用在select语句中

SELECT Name,Age,      (SELECT AVG(Age) FROM Person) AS AvgAge,       Age - (SELECT AVG(Age) FROM Person) AS Difference   FROM Person

这里要说明一下,列的意思分别是,姓名,年龄,平均年龄以及与平均年龄的差值。

下面我们用UDF来实现,先定义两个UDF如下:

CREATE FUNCTION dbo.AvgAge()  RETURNS intAS  BEGIN      RETURN (SELECT AVG(Age) FROM Person)  ENDGoCREATE FUNCTION dbo.AgeDifference(@Age int)  RETURNS intAS  BEGIN      RETURN @Age - dbo.AvgAge();        --在一个UDF内引用另外一个UDF,好华丽的说  END

然后执行查询:

SELECT Name,Age,dbo.AvgAge() AS AvgAge,dbo.AgeDifference(Age) as Difference   FROM Person

三、内联表值函数

SQL Server中的用户自定义函数并不只限于返回标量值,也可以返回表。返回的表在很大程度上和其他表是一样的。

可以对返回 表的UDF执行JOIN,甚至对结果应用WHERE条件。

改为用表作为返回值并不难,对于UDF来说,表就像任何其他SQL Server数据类型一样。

例1:像表一样地用UDF

CREATE FUNCTION dbo.fnContactName()  RETURNS TABLEAS  RETURN (          SELECT Id,LastName + ',' + FirstName AS Name  FROM Man          )

然后我们就可以像表一样地用UDF了。

SELECT * FROM dbo.fnContactName()

例2:带参数返回表

CREATE FUNCTION dbo.fnNameLike(@LName varchar(20))  RETURNS TABLE  AS  RETURN (          SELECT Id,LastName + ',' + FirstName AS Name FROM Man WHERE LastName Like @LName + '%'          )

然后查询的时候可以这样用:

SELECT * FROM dbo.fnNameLike('刘')

没有WHERE子句,没有过滤SELECT列表,就可以反复使用该函数,而不需要进行"剪切和粘贴"。

四、多语句表值函数

语法:

CREATE FUNCTION Funtion_name(    --这里定义传入参数及类型)RETURNS@table_name TABLE(    --这里定义@table_name的列名)ASBEGIN    --这里写sql语句并且将最终需要返回的结果集塞到@table_name 这张表里面    RETURN ENDGO

这个函数通过传入一个十进制的数字,分别返回对应的二进制、八进制、十六进制。

Create FUNCTION F_TConversion(    @NUM INT)RETURNS@t_table TABLE(    [Binary] varchar(64),    Octal varchar(16),    Hexadecimal varchar(8))ASBEGIN    DECLARE @RESULT2 VARCHAR(500)='',@RESULT8 VARCHAR(500)='',@RESULT16 VARCHAR(500)='';     WITH CTE AS(         SELECT @NUM/2 D2,@NUM%2 S2,@NUM/8 D8,@NUM%8 S8,@NUM/16 D16,@NUM%16 S16,1 [INDEX]         UNION ALL         SELECT D2/2 , D2%2,D8/8 , D8%8,D16/16 , D16%16,[INDEX]+1 FROM CTE WHERE D2>0     )     SELECT @RESULT2+=CAST(S2 AS VARCHAR(1))          ,@RESULT8+=CASE WHEN D8=0 AND S8=0 THEN '' ELSE CAST(S8 AS VARCHAR(1)) END          ,@RESULT16+=CASE WHEN D16=0 AND S16=0 THEN ''                           ELSE CASE CAST(S16 AS VARCHAR(5))                                WHEN '10' THEN 'A'                                 WHEN '11' THEN 'B'                                 WHEN '12' THEN 'C'                                 WHEN '13' THEN 'D'                                 WHEN '14' THEN 'E'                                 WHEN '15' THEN 'F'                                 ELSE CAST(S16 AS VARCHAR(5))                            END                        END    FROM CTE ORDER BY [INDEX] DESC    INSERT INTO @t_table    SELECT @RESULT2,@RESULT8,@RESULT16    RETURN ENDGO

SQL Server怎么创建用户定义函数

五、理解确定性

用户自定义函数可以是确定性的也可以是非确定性的。如果给定了一组特定的有效输入,每次函数就都能返回相同的结果,那么就说该函数是确定性的。

SUM()就是一个确定性的内置函数。3、5、10的总合永远都是18,而GETDATE()的值就是非确定性的,因为每次调用它的时候GETDATE()都会改变。

如果视图或计算列引用非确定性函数,则在该视图或列上将不允许建立任何索引

如果判定函数是否是确定性的?除了上面描述的规则外,这些信息存储在对象的IsDeterministic属性中,可以利用OBJECTPROPERTY属性检查。

SELECT OBJECTPROPERTY(OBJECT_ID('DateOnly'),'IsDeterministic');  --只是刚才的那个自定义函数

输出结果如下:

SQL Server怎么创建用户定义函数

居然是非确定性的。原因在于之前在定义该函数的时候,并没有加上这个"WITH SCHEMABINDING"。

ALTER FUNCTION dbo.DateOnly(@Date date)  RETURNS date  WITH SCHEMABINDING  --当我们加上这一句之后  AS  BEGIN    RETURN @Date  END

在执行查询,该函数就是确定性的了。

读到这里,这篇“SQL Server怎么创建用户定义函数”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: SQL Server怎么创建用户定义函数

本文链接: https://www.lsjlt.com/news/329785.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server怎么创建用户定义函数
    本文小编为大家详细介绍“SQL Server怎么创建用户定义函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server怎么创建用户定义函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-30
  • SQL Server创建用户定义函数
    一、UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调用。 UDF和存储过程的主要区别在于返回结果的方式:...
    99+
    2024-04-02
  • PHP 用户自定义函数的创建
    php 自定义函数允许封装代码块,简化代码并提高可维护性。语法:function function_name(argument1, argument2, ...) { // 代码块 }。...
    99+
    2024-04-14
    php 自定义函数
  • 在PHP中如何创建用户定义函数
    这篇文章将为大家详细讲解有关在PHP中如何创建用户定义函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 PHP 创建用户定义函数用户定义的函数声明以单词 "...
    99+
    2024-04-02
  • PHP 用户自定义函数的创建和管理
    php 用户自定义函数可以执行特定任务并重复使用。创建自定义函数需要使用特定语法,指定函数名和参数。示例展示了如何计算不同形状的面积。调用自定义函数类似于调用内建函数。管理自定义函数包括...
    99+
    2024-04-14
    函数 php
  • SQL server中怎么使用自定义函数和游标
    SQL server中怎么使用自定义函数和游标,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。编号标准宗地编码(landCode...
    99+
    2024-04-02
  • Sql Server中如何自定义函数
    今天就跟大家聊聊有关Sql Server中如何自定义函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、判断字段值是否有中文--SQL ...
    99+
    2024-04-02
  • sql怎么创建自定义数据类型
    在 SQL 中,创建自定义数据类型可以使用 `CREATE TYPE` 语句。以下是一个示例:```sqlCREATE TYPE e...
    99+
    2023-09-25
    sql
  • SQL Server中怎么创建定时作业
    本篇文章给大家分享的是有关SQL Server中怎么创建定时作业,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、首先我们打开SQL Serv...
    99+
    2024-04-02
  • SQL Server创建用户并且为用户授权
    一丶创建用户 右键点击登录名→新建登录名 二丶设置管理员权限 进入【服务器角色】在右侧的服务器角色面板中,勾选public 服务器角色说明sysadmin执行SQL Server中的任何操作ser...
    99+
    2023-09-01
    数据库 服务器 sql
  • C#怎么创建用户自定义异常
    本篇内容主要讲解“C#怎么创建用户自定义异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么创建用户自定义异常”吧!创建用户自定义异常您也可以定义自己的异常。用户自定义的异常类是派生自&n...
    99+
    2023-06-17
  • MySQL中怎么创建自定义聚合函数
    要在MySQL中创建自定义聚合函数,需要遵循以下步骤: 创建一个用于存储函数的数据库或选择一个现有的数据库。 CREATE DA...
    99+
    2024-04-30
    MySQL
  • SQL Server创建用户赋权报错Permissions at the server scope can怎么解决
    本篇内容主要讲解“SQL Server创建用户赋权报错Permissions at the server scope can怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让...
    99+
    2024-04-02
  • SQL SERVER触发器怎么创建
    本篇内容主要讲解“SQL SERVER触发器怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL SERVER触发器怎么创建”吧!触发器是一种特殊的存储过程,触发器主...
    99+
    2023-06-29
  • SQL Server怎么导出db所有用户权限创建语句
    这篇文章主要介绍“SQL Server怎么导出db所有用户权限创建语句”,在日常操作中,相信很多人在SQL Server怎么导出db所有用户权限创建语句问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2024-04-02
  • sql server 2005数据库怎么创建快照
    本篇内容介绍了“sql server 2005数据库怎么创建快照”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • SQL Server 中怎么创建约束
    今天就跟大家聊聊有关SQL Server 中怎么创建约束,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是主键?在数据库中,常常不只是一个表,这些...
    99+
    2024-04-02
  • 如何使用 PHP 创建自定义函数库?
    在 php 中创建自定义函数库的步骤为:创建函数文件,例如 myfunctions.php,并在其中定义函数。使用 require 或 include 语句将函数库文件包含到 php 脚...
    99+
    2024-04-10
    php 自定义函数库
  • sql server怎样才能创建数据库
    这篇文章主要介绍了sql server怎样才能创建数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。可以通过Sql Server Mana...
    99+
    2024-04-02
  • sql server中怎么禁止创建表
    这篇文章给大家介绍sql server中怎么禁止创建表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、禁止创建数据库表在要禁止的数据上,例如(jb51net) 右键 》属性 》权限2...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作