用户自定义函数
自定义函数不能执行一系列改变数据库状态的操作,可以像系统函数在查询或存储过程等的程序中使用,也可以像相信过程一样能过 execute 命令来执行。自定义函数中存储了一个 Transact - SQL 例程可以返回一定的值。根据函数返回值形式的不同,将用户看定义函数分为三种类型:
( 1 ). 标量型函数:标量型函数返回一个确定类型的标量值,其返回值类型为除了 text, ntext , image ,cursor ,timestampt 和 table 类型外的其它数据类型。函数体语句定义在 begin - end 语句内,其中包含了可以返回值的 Transact - SQL 命令。
语法:
 create function [ owner_name ] function_name
( [ {@parameter_name [as ] scalar_parameter_data_type [ =default ] } [ ,n ] ])
 returns scalar_return_data_type
 [ with <function_option> [,n ] ]
 [ as ] 
 begin 
function_body
 return [ scalar_expression ] 
 end 
其中:
 < 1 > .function_option 有两个可选值:{encryption | schemabinding}
encryption: 加密选项,让 SQL Server 对系统表中有关 create function 的声明加密,以防止用户自定义函数作为 SQL Server 复制的一部分被发布。
schemabinding,计划绑定选项。将用户自定义函数绑定到它所引用的数据库对象,则函数所涉及的的数据库对象从此将不能被删除或修改,除非函数被删除或去掉此选项。应注意的是要绑定的数据库对象必须与函数在同一数据库中。
 < 2 > .owner_name: 指定用户自定义函数的所有者。
 < 3 > .function_name: 指定用户自定义函数的名称。
 < 4 > .database_name.owner_name.function_name 应是唯一的。
 < 5 > . @parameter_name : 定义一个式多个参数的名称,一个函数最多可以定义 1024 个参数,每个参数前用 @符号标明 ,参数的作用范围是整个函数,参数只能替代常量,不能替代表名,列名或其它数据库对象名称,用户自定义函数不支持输出参数。
 < 6 > .scalar_parameter_data_type: 指定标量参数的数据类型,除了 text, ntext , image , cursor,timestampt 和 table 类型外的其它数据类型。
 < 7 > .scalar_return_data_type: 指定标量返回值的数据类型,除了 text, ntext , image , cursor,timestampt 和 table 类型外的其它数据类型。
 < 8 > .scalar_expression: 指定标量型用户自定义函数返回的标量值表达式。
 < 9 > .function_body: 指定一系列的 Transact_SQL 语句它们决定了函数的返回值。

例:创建军工龄工资计算函数
 use taihang
 go 
 -- 创建函数 
 create function workyearwage( @hiredate datetime , @today datetime , @per_wage money )
 -- hiredate 表示雇佣期, today 表示当前日期,par_wage 表示每一年的工龄应得的工资额 
 returns money 
 as begin 
 declare @workyearwage money 
 set @workyearwage = ( year ( @today ) - year ( @hiredate )) * @per_wage 
 return ( @workyearwage )
 end -- 结束函数定义 
 go 
 -- 调用函数 
 select taihang.dbo.workyearwage( &apos; 1999-7-1 &apos; , getdate (), 15 )
 as work_year_wage
注意:以上的函数体可简写为:
 as begin 
 return (( year ( @today ) - year ( @hiredate )) * @per_wage )
 end 

( 2 ). 内嵌表值函数:以表的形式返回一个返回值,即它返回的是一个表。内嵌表值型函数没有由 begin -end 语句括起来的函数体,其返回的表由一个位于 return 子句中的 select 命令段从数据库中筛先出来。内嵌表值型函数功能相当于一个参数化的视图。
创建函数语法:
 create function [ owner_name ] function_name
( [ {@parameter_name [as ] scalar_parameter_data_type [ =default ] } [ ,n ] ])
 returns table 
 [ with <function_option> [,n ] ]
 [ as ] 
 return ( select - stmt)
其中:
 < 1 > . table : 批定返回值为一个表。
 < 2 > . select - stmt: 单个 select 语句,确定返回的表的数据。
例:创建返回所有订购某类产品的公司信息函数
 use taihang
 go 
 create function orderfirms( @productid varchar ( 30 ))
 -- productid 表示产品代号 
 returns table 
 as 
 return ( select * from products p
 where p.p_id = @productid )
 go 

( 3 ). 多语句表值型函数:可以看作标量型和内嵌表值型函数的结合体,它的返回值是一个表,但它和标量型函数一样有一个用 begin - end 语句括起来的函数体。返回值表中的数据是由函数体
语法:
 create function [ owner_name ] function_name
( [ {@parameter_name [as ] scalar_parameter_data_type [ =default ] } [ ,n ] ])
 returns @return_variable table < table_type_definition > 
 [ with <function_option> [,n ] ]
 [ as ] 
 begin 
function_body
 return end 
其中:
 < 1 > . < table_type_definition > :({column_definition | table_constraint} [ ,n ] )
 < 2 > . @return_variable : 一个 table 类型的变量,用于存储和累积返回的表中的数据行。

 4 . 修改用户自定义函数
 alter function : 此命令语法与 create function 相同,相当于重建。
 5 . 删除用户自定义函数
 drop function { [ owner_name ] function_name} [ ,n ] 
建议到企业管理器里修改,简单、方便。

SQL Server自定义函数( 转载于51CTO )的更多相关文章

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

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

  2. 13、SQL Server 自定义函数

    SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值 ...

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

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

  4. 也来谈谈SQL SERVER 自定义函数~

    在使用SQL SERVER 数据库的时候,函数大家都应该用过,简单的比如 系统聚合函数 Sum(),Max() 等等.但是一些初学者编写自定义函数的时候,经常问起什么是表值函数,什么是标量值函数. 表 ...

  5. sql server自定义函数学习笔记

    sql server中函数分别有:表值函数.标量函数.聚合函数.系统函数.这些函数中除系统函数外其他函数都需要用户进行自定义. 一.表值函数 简单表值函数 创建 create function fu_ ...

  6. SQL server 自定义函数FUNCTION的使用

    原文链接:https://blog.csdn.net/lanxingbudui/article/details/81736402 前言:        在SQL server中不仅可以可以使用系统自带 ...

  7. sql server 自定义函数

    create function 函数名 (@pno int) returns int as begin declare @a int if not exists(select * from perso ...

  8. SQL SERVER 自定义函数 整数转成指定长度的16进制 转换成指定长度的16进制 不足补0

    最近做项目扩展的时候,遇到问题就是将整型转换成指定长度的16进制 刚开始就是直接使用 cast(12 as varbinary(4))但是发现这个不能解决我的问题 所以就上网搜了一下,然后改了改,下面 ...

  9. SQL SERVER 自定义函数 split

    Create function [dbo].[split] ( ), ) ) )) as begin declare @i int set @SourceSql=rtrim(ltrim(@Source ...

随机推荐

  1. TCP客户/服务器程序概述

    一个回射服务器: 1)客户从标准输入读入一行文本,并写给服务器 2)服务器从网络输入读入这行文本,并回射给客户 3)客户从网络输入读入这行回射文本,并显示在标准输出上 回射输入行这样一个客户/服务器程 ...

  2. 朗科U903 低级格式化后,量产错误:read onlypage (控制器芯片群联2251-03)的解决方案

    1. 下载群联量产工作 MPALL v3.63.0D for Netac 2. 在Setting页面,选择如下(红色矩形选中): 3. 然后执行量产,量产完成后,重新插拔就能看到U盘.

  3. 实现一个基于tcc/tlink的简单的编译链接工具

    一.基础研究 在这里我们需要提供一套新的c语言开发工具cc,它支持的c程序不是从main开始运行而是从CMain开始运行. 书上已经对该工具程序进行了需求分析:(1)要在屏幕中间显示彩色的字符串:(2 ...

  4. 关于如何将C语言源文件转化为汇编文件

    --转载自:http://blog.21ic.com/user1/6088/archives/2010/68469.html 方法:(假设当前工程中只有一个C代码文件) 第1步:新建一个工程,添加C文 ...

  5. Unity中OnGUI绘制贪吃蛇

    Square.cs : public class Square : MonoBehaviour { public int row, col; public Rect rect; public Text ...

  6. oracle连接进程数设置

    SQL> select count(*) from v$session #连接数SQL> Select count(*) from v$session where status='ACTI ...

  7. puppet常用调试命令

    yum快速部署puppet测试环境(C/S端) rpm -ivh  http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm yum r ...

  8. MARCHdesign_王濤's 星云个人网站 | www.xingyun.cn/MARCHdesign

    MARCHdesign_王濤's 星云个人网站 | www.xingyun.cn/MARCHdesign MARCHdesign_王濤

  9. L1签证_百度百科

    L1签证_百度百科 L1签证

  10. SQL Server优化之SQL语句优化

    一切都是为了性能,一切都是为了业务 一.查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_conditi ...