用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统 函
数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过
EXECUTE 命令来执行。在 SQL Server 中根据函数返回值形式的不同将用户自 定
义函数分为三种类型:

(1) 标量函数

(2) 内联表值函数

(3) 多语句表值函数

(1) 标量函数
标量函数返回一个确定类型的标量值,其返回值类型为除 TEXT 、 NTEXT 、
IMAGE 、 CURSOR 、 TIMESTAMP 和 TABLE 类型外的其它数据类型。函数体语句定义
在 BEGIN-END 语句内。在 RETURNS 子句中定义返回值的数据类型,并且函数的
最后一条语句必须为 Return 语句。创建标量函数的格式:
Create Function 函数名(参数)
Returns 返回值数据类型
[With {Encryption|Schemabinding}]
[AS]
BEGIN
SQL 语句 ( 必须有 Return 子句 )
END
举例:
*******************************************************************
CREATE FUNCTION dbo.Max
(
@a int,
@b int
)
RETURNS int AS
BEGIN
DECLARE @max int
IF @a>@b SET @max=@a
ELSE SET @max=@b
Return @max
END
*******************************************************************调用标量函数可以在 T-SQL 语句中允许使用标量表达式的任何位置调用返
回标量值(与标量表达式的数据类型相同)的任何函数。必须使用至少由两部 分
组成名称的函数来调用标量值函数,即架构名 . 对象名,如 dbo.Max(12,34) 。
(2) 内联表值函数
内联表值型函数以表的形式返回一个返回值,即它返回的是一个表。内联 表
值型函数没有由 BEGIN-END 语句括起来的函数体。其返回的表是由一个位于
RETURN 子句中的 SELECT 命令从数据库中筛选出来。内联表值型函数功能相当
于一个参数化的视图。
*******************************************************************
Create Function 函数名(参数)
RETURNS table
[with {Encryption|Schemabinding}]
AS
Return( 一条 SQL 语句 )
举例:
CREATE FUNCTION func (@id char(8))
RETURNS TABLE
AS
RETURN (SELECT * FROM student WHERE SID = @id)
*********************************************************************
调用内联表值函数:调用时不需指定架构名,如 select * from
func('51300521')
(3) 多语句表值函数
多语句表值函数可以看作标量函数和内联表值函数的结合体。它的返回值 是
一个表,但它和标量型函数一样有一个用 BEGIN-END 语句括起来的函数体,返
回值的表中的数据是由函数体中的语句插入的。由此可见,它可以进行多次查 询 ,
对数据进行多次筛选与合并,弥补了内联表值函数的不足。
Create Function 函数名(参数)
RETURNS 表变量名 ( 表变量字段定义 )[with {Encryption|Schemabinding}]
AS
BEGIN
SQL 语句
Return
END
举例:
*******************************************************************
CREATE FUNCTION func(@selection int)
RETURNS @table TABLE
(
SID char(4) primary key not null,
SName nvarchar(4) null
)
AS
BEGIN
IF @selection = 0
INSERT INTO @table (SELECT SID,SName FROM student0)
ELSE
INSERT INTO @table (SELECT SID,SName FROM student1)
Return
END
*******************************************************************
调用多语句表值函数:和调用内联表值函数一样,调用时不需制定架构名。
注意:与编程语言中的函数不同的是, SQL Server 自定义函数必须具有返
回值。
注意: Schemabinding 用于将函数绑定到它引用的对象上。函数一旦绑定,
则不能删除、修改,除非删除绑定。

SQL Server用户自定义函数的更多相关文章

  1. SQL Server用户自定义函数(UDF)

    一.UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调用. UDF和存储过程的主要区别在于返回结果的方式: 使用UDF时可传 ...

  2. SQL SERVER 用户自定义函数(UDF)深入解析

    本文内容概要: UDF 概念.原理.优缺点.UDF 的分类 详细讲述3种 UDF 的创建.调用方法以及注意事项 UDF 的实践建议 基本原理: UDF:user-defined functions,用 ...

  3. SQL之用户自定义函数

    关于SQL Server用户自定义的函数,有标量函数.表值函数(内联表值函数.多语句表值函数)两种. 题外话,可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里,这里简单提示一下,在 ...

  4. sql server 自定义函数的使用

    sql server 自定义函数的使用 自定义函数 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函 ...

  5. SQL Server 自定义函数(Function)——参数默认值

    sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Functio ...

  6. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  7. SQL Server排序函数row_number和rank的区别

    SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...

  8. 数据库开发基础-SQl Server 聚合函数、数学函数、字符串函数、时间日期函数

    SQL 拥有很多可用于计数和计算的内建函数. 函数的语法 内建 SQL 函数的语法是: SELECT function(列) FROM 表 函数的类型 在 SQL 中,基本的函数类型和种类有若干种.函 ...

  9. SQL SERVER 2008函数大全(含例子)

    --SQL SERVER 2008 函数大全 /* author:TracyLee csdncount:Travylee */ /* 一.字符串函数: 1.ascii(字符串表达式)    返回字符串 ...

随机推荐

  1. JavaScript 在函数中使用Ajax获取的值作为函数的返回值

    解决:JavaScript 在函数中使用Ajax获取的值作为函数的返回值,结果无法获取到返回值 原因:ajax默认使用异步方式,要将异步改为同步方式 案例:通过区域ID,获取该区域下所有的学校 var ...

  2. High Performance Django

    构建高性能Django站点   性能 可用 伸缩 扩展 安全 build 1.审慎引入第三方库(是否活跃.是否带入query.是否容易缓存) 2.db:减少query次数 减少耗时query 减小返回 ...

  3. Spring学习笔记之方法注入

    public  abstract class ReplacedBean {protected static final Log log = LogFactory.getLog(ReplacedBean ...

  4. 开发基于Handoff的App(Swift)

            iOS8推出一个新特性,叫做Handoff.Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行 ...

  5. Android TextView文字横向自动滚动(跑马灯)

    TextView实现文字滚动需要以下几个要点:   1.文字长度长于可显示范围:android:singleLine="true"   2.设置可滚到,或显示样式:android: ...

  6. Android ScrollView与ViewPager滑动冲突

    前段时间做项目碰到在ScrollView里添加ViewPager,但是发现ViewPager的左右滑动和ScrollView的滑动冲突了,解决这个问题的方法是重写ScrollView. 代码: pub ...

  7. Apache Qpid Python 1.35.0 发布

    Apache Qpid Python 1.35.0 发布了,Apache Qpid (Open Source AMQP Messaging) 是一个跨平台的企业通讯解决方案,实现了高级消息队列协议.提 ...

  8. 红帽中出现”This system is not registered with RHN”的解决方案

    原因是你的linux没有在红帽网络上注册,所以无法下载上面的软件包,替代方案可以使用centos. 下面介绍下使用centos 的流程 1.卸载rhel的默认安装的yum包查看yum包rpm -qa| ...

  9. keychain 中的概念理解

    kSecAttrAccessible 这个属性控制Keychain中的一个Item什么时候可以被访问,可选值有:kSecAttrAccessibleWhenUnlocked, kSecAttrAcce ...

  10. Interview----判断整数序列是否是二叉搜索树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果:   ...