SQL Server用户自定义函数

用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统

数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过
EXECUTE 命令来执行。在 SQL Server
中根据函数返回值形式的不同将用户自 定
义函数分为三种类型:
(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 @[email protected]
ELSE SET
@[email protected]
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用户自定义函数,码迷,mamicode.com

时间: 2024-10-14 11:54:46

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

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

一.UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数,但不可传出参数.输出参数的概念被更为健壮的返回值取代了. 和系统函数一样,可以返回标量值,这个值的好处是它并不像在存储过程中那样只限于整形数据类型,而是可以返回大多数SQL Server数据类型. UDF有以下两种类型: 返回标量值的UDF. 返回表的UDF. 创建语法: CREATE FUN

SQL之用户自定义函数

关于SQL Server用户自定义的函数,有标量函数.表值函数(内联表值函数.多语句表值函数)两种. 题外话,可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里,这里简单提示一下,在Microsoft SQL Server Managerment Studio里面,展开具体需要创建SQL Server用户自定义函数的数据库(即每个用户自定义函数只针对具体的一个数据库有用),然后找到可编程性选项,再展开找到函数选项,在具体的函数选项里面可参照下图的方式鼠标右键选择来添加. 标量函

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

原文:SQL Server 自定义函数(Function)--参数默认值 sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,

SQL Server DATEDIFF() 函数

Server Date 函数 定义和用法 DATEDIFF() 函数返回两个日期之间的天数. 语法DATEDIFF(datepart,startdate,enddate) startdate 和 enddate 参数是合法的日期表达式. datepart 参数可以是下列的值: datepart 缩写 年 yy, yyyy 季度 qq, q 月 mm, m 年中的日 dy, y 日 dd, d 周 wk, ww 星期 dw, w 小时 hh 分钟 mi, n 秒 ss, s 毫秒 ms 微妙 mc

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

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. v1.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客.sql server 基

13、SQL Server 自定义函数

SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值函数用于返回单个值,而表值函数用于返回一个结果集. 函数参数 参数可以是常量.表中的某个列.表达式或其他类型的值.在函数中有三种类型的参数. 1.输入:指必须输入一个值. 2.可选值:在执行该参数时,可以选择不输入参数. 3.默认值:函数中默认有值存在,调用时可以不指定该值. 创建标量值函数 语法:

SQL Server 2000 函数使用---CAST 和 CONVERT

本文来自:http://www.cnblogs.com/xh831213/category/47654.html 将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相似的功能. 语法 使用 CAST: CAST ( expression AS data_type ) 使用 CONVERT: CONVERT (data_type[(length)], expression [, style]) 参数 expression 是任何有效的 Microsoft® SQL

Sql Server DateDiff 函数中interval的值

今天在工作中碰到了个问题,统计本周流量时,使用DateDiff函数由于w与week混淆产生统计结果出现错误 参数 interval的设定值如下: 值 缩 写(Sql Server) 说明 Year Yy 年 1753 ~ 9999 Quarter Qq 季 1 ~ 4 Month Mm或m 月1 ~ 12 Day of year Dy或d 一年的日数,一年中的第几日 1-366 Day Dd 日,1-31 Weekday Dw或w 一周的日数,一周中的第几日 1-7 Week Wk 周,一年中的

SQL SERVER 开窗函数简介

在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Number, OrderID,CustomerID, EmployeeID,OrderDate FROM Orders (NOLOCK) ) SELECT Number,OrderID,CustomerID, Employ