创建用户自定义函数 SQL

时间:2021-08-01 21:53:46

//创建用户自定义函数------标量函数

create function dbo.bmrs(@bmh as int)

returns int

as

begin

declare @bmrs int

select @bmrs=count(工号) from 销售人员 where 部门号=@bmh

return @bmrs

end

go

exec sp_help  销售人员

go

//标量函数的调用

declare @bmrs int

select @bmrs=dbo.bmrs(2)

select '2号部门人数'=@bmrs

go

select '2号部门人数 '+convert(varchar(4),dbo.bmrs(3))

select 部门经理,部门名称,实际人数=dbo.bmrs(部门号) from 部门信息

go

select 部门经理,部门名称,实际人数=dbo.bmrs(部门号) from 部门信息 where 部门号=2

//创建内嵌表值函数

----------a.订单号,销售人员=b.姓名,客户=c.姓名,供应商=d.名称,a.数量,a.总金额

------------以部门名称作为输入参数,创建部门订单内嵌表值函数

select * from 部门信息

select * from 订单信息

select * from 客户信息

select * from 供应商信息

select * from 销售人员

go

----------创建内嵌表值函数

create function dbo.bmdd(@bmmc as varchar(10))

returns table

as

return( select a.订单号,销售人员=b.姓名,客户=c.姓名,供应商=d.名称,a.总金额,a.数量

from 订单信息 as a inner join 销售人员 as b on a.销售工号=b.工号 inner join 客户信息 as c

on a.客户编号=c.员工编号 inner join 供应商信息 as d on a.货品编码=d.编码 inner join 部门信息 as e

on b.部门号=e.部门号 where 部门名称=e.部门名称)

go

----------内嵌表值函数的调用

select * from dbo.bmdd('销售部')

--------------创建内嵌表值函数的语法格式

create function 函数所有者.函数名称(标量参数 as 标量参数数据类型)

returns table

as

return (select语句)

-----------创建视图的语法格式

create view 视图名 as select语句

----------------用create function语句创建函数。

函数名在数据库汇总必须唯一,用户定义函数可以有输入参数并返回值,但是没有输出参数。

create function 所有者.函数名(标量参数 as 标量数据类型)

returns 标量参数数据类型

as

begin

函数体

return 变量//标量表达式

end

----------多语句表值函数的返回值是表,有函数体,在函数体中可以使用表变量。

创建多语句表值函数语法格式:

create function [所有者名称.]函数名称(@参数名称 as 标量数据类型)

returns @表变量 table 表的定义

as

begin

函数体

return

end

go

说明:表(table)变量是一种特殊的数据类型,可用于函数、存储过程和批处理中,用于存储结果集以供以后处理。该数据类型主要用于临时存储一组行,这些行将作为表值函数的结果集返回。

table变量的行为类似于局部变量,其作用域为声明该变量的函数、存储过程或批处理,其生命周期在定义table变量的

函数、存储过程呢过和批处理结束时将自动清楚table变量。

表(table)变量的声明语法:declare @local_variable table(表的定义)

/*根据订单信息表查询得出每个销售人员所开的订单数。查询的结果包括销售人

员工号和订单数。下面,我们采用表变量的方式将查询的结果集保存下来,以便程序使用。*/

declare @ordernum

table(销售工号 int,

订单数 int)

---使用insert....select语句向表变量中插入记录

insert @ordernum

select 销售工号,订单数=count(销售工号) from 订单信息 group by 销售工号

select * from @ordernum

go

/*在market数据库中,创建一个多语句表值函数,它可以查询指

定部门每个销售人员的订单数,该函数接收输入的部门号,通过查询“订单信息”表返回销售人员的工号、姓名和订单数。*/

---创建多语句表值函数

create function dbo.info(@bmh as int)

returns @xsry table(工号 int primary key,

姓名 varchar(10),

订单数 int)

as

begin

declare @ordernum

table(销售工号 int,订单数 int)

insert @ordernum select 销售工号,订单数=count(销售工号) from 订单信息 group by 销售工号

insert @xsry select a.工号,a.姓名,b.订单数 from 销售人员 as a left join @ordernum as b on a.工号=b.销售工号

where a.部门号=@bmh

return

end

go

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

  1. mysql 创建用户自定义函数

    为了防止分号产生的中途输出,自己定义一个 分隔符,这里仿照mysql官方的例子:使用两个美元符号 $$ 作为分割符号,下面这段代码就是创建一个自定义mysql函数的原型了,可以在这个基础上修改,这样, ...

  2. mysql 创建用户自定义函数(转可运行)

    set global log_bin_trust_function_creators = 1; -- 开启bin_log 复制 函数创建DROP FUNCTION IF EXISTS hello; - ...

  3. SQLServer之创建标量函数

    创建标量函数注意事项 在 SQL Server 和 Azure SQL Database 中创建用户定义函数. 用户定义函数是接受参数.执行操作(例如复杂计算)并将操作结果以值的形式返回的 Trans ...

  4. 关系数据库SQL之可编程性函数(用户自定义函数)

    前言 在关系型数据库中除了前面几篇基本的数据库和数据表操作之外,还提供了可编程性的函数.存储过程.事务.触发器及游标. 本文介绍的是函数. 函数分为两种: 系统函数 用户自定义函数 准备工作 这里以银 ...

  5. SQL Server用户自定义函数

    用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统 函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行.在 SQL Server 中根据函数 ...

  6. SQL Server UDF用户自定义函数

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

  7. SQL之用户自定义函数

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

  8. Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)

    在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF( ...

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

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

随机推荐

  1. 最简单的jsp+servlet的增删改查代码

    package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

  2. [分享] 晒一晒我的Windows7_SP1封装母盘(多图,附部分工具),老鸟飘过~

    [分享] 晒一晒我的Windows7_SP1封装母盘(多图,附部分工具),老鸟飘过~ 大宝贝1 发表于 2012-8-9 18:01:57 https://www.itsk.com/thread-20 ...

  3. iOS边练边学--父子控件之作为导航控制器的子类产生的问题以及网易新闻练习

    一.导航控制器的子类 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来.但是系统只会默认修改第一个. 解决办法1:系统帮忙给第 ...

  4. JS获取汉字首字母

    //获取 汉字首字母 function makePy(str) { if (typeof (str) != "string") throw new Error(-1, " ...

  5. 最小费用最大流 POJ2195-Going Home

    网络流相关知识参考: http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html 出处:優YoU http://blog.csdn. ...

  6. 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析

    [渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...

  7. 【转】Android逆向入门流程

    原文:https://www.jianshu.com/p/71fb7ccc05ff 0.写在前面 本文是笔者自学笔记,以破解某目标apk的方式进行学习,中间辅以原理性知识,方便面试需求. 参考文章的原 ...

  8. SpringCloud报错:Caused by: org.yaml.snakeyaml.parser.ParserException: while parsing MappingNode

    今天在配置eureka集群时,SpringCloud报错如下: Caused by: org.yaml.snakeyaml.parser.ParserException: while parsing ...

  9. 【C】——const和volatile可以并用吗?

    答案是肯定的,可以一起用. 因为很多人误解了const的真正含义,很多初学者认为const修饰的就是常量,而常量不会改变,而既然不会改变,那volatile就没有意义. 但是实际上这正是对const的 ...

  10. Linux 新手入门常用命令

    1,增加用户:useradd mylinux passwd mylinux 添加你的用户密码 2,切换用户: su otheruser   (注意这种切换方式只是临时的,本质工作目录还在原来的用户目录 ...