表值函数,标量值函数详解
顾名思义:表值函数返回的是表,而标量值函数可以返回基类型
- 表值函数
用户定义表值函数返回 table 数据类型。对于内联表值函数,没有函数主体;表是单个 SELECT 语句的结果集。
以下示例创建了一个内联表值函数。此函数的输入参数为客户(商店)ID,而返回 ProductID
、Name
以及 YTD Total
(销售到商店的每种产品的本年度节截止到现在的销售总额)列。
USE AdventureWorks; GO CREATE FUNCTION Sales.fn_SalesByStore (@storeid int) RETURNS TABLE AS RETURN ( SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'YTD Total' FROM Production.Product AS P JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID WHERE SH.CustomerID = @storeid GROUP BY P.ProductID, P.Name ); GO
以下示例调用此函数并指定客户 ID 为 602
SELECT * FROM Sales.fn_SalesByStore (602);
对于多语句表值函数,在 BEGIN...END 语句块中定义的函数体包含一系列 Transact-SQL 语句,这些语句可生成行并将其插入将返回的表中。以下示例创建了一个表值函数。此函数具有一个输入参数 EmployeeID
而返回直接或间接向指定员工报告的所有员工的列表。
USE AdventureWorks; GO CREATE FUNCTION dbo.fn_FindReports (@InEmpID INTEGER) RETURNS @retFindReports TABLE ( EmployeeID int primary key NOT NULL, Name nvarchar(255) NOT NULL, Title nvarchar(50) NOT NULL, EmployeeLevel int NOT NULL, Sort nvarchar (255) NOT NULL ) --Returns a result set that lists all the employees who report to the --specific employee directly or indirectly.*/ AS BEGIN WITH DirectReports(Name, Title, EmployeeID, EmployeeLevel, Sort) AS (SELECT CONVERT(Varchar(255), c.FirstName + ' ' + c.LastName), e.Title, e.EmployeeID, 1, CONVERT(Varchar(255), c.FirstName + ' ' + c.LastName) FROM HumanResources.Employee AS e JOIN Person.Contact AS c ON e.ContactID = c.ContactID WHERE e.EmployeeID = @InEmpID UNION ALL SELECT CONVERT(Varchar(255), REPLICATE ('| ' , EmployeeLevel) + c.FirstName + ' ' + c.LastName), e.Title, e.EmployeeID, EmployeeLevel + 1, CONVERT (Varchar(255), RTRIM(Sort) + '| ' + FirstName + ' ' + LastName) FROM HumanResources.Employee as e JOIN Person.Contact AS c ON e.ContactID = c.ContactID JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID ) -- copy the required columns to the result of the function INSERT @retFindReports SELECT EmployeeID, Name, Title, EmployeeLevel, Sort FROM DirectReports RETURN END; GO
在以下示例中,调用了此函数。
-- Example invocation SELECT EmployeeID, Name, Title, EmployeeLevel FROM dbo.fn_FindReports(109) ORDER BY Sort;
2.标量值函数
(
@nodeId int
)
RETURNS int
AS
declare @nodeCount int
select @nodeCount=5 from MenuTree
return @nodeCount
END
这个函数很简单返回一个整型值,然后就可以在存储过程中调用了,不过调用的方式有所不同,象上面的表值函数调用是不需要所有者的,只要写函数名称就可以,对于标量值函数来说,是需要加上所有者的,比如所有者是dbo
表值函数,标量值函数详解相关推荐
- python3主函数返回值_Python 详解基本语法_函数_返回值
Python 详解基本语法 概要: 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序作出进一步的操作.可以说是函数的返回值令 ...
- Python return函数返回值(详解)
文章目录 Python return函数返回值 Python return函数返回值 到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束.但实际上,在某些场景中,我们还需函数将处理 ...
- SQL Server 2008 创建标量值函数、存储过程
在运用数据库的过程中,需要用到标量值函数以及存储过程. 仅以SQL Server 2008为例,对标量值函数以及存储过程的流程进行说明(标量值函数以及存储过程当中的代码不在这里讲述) 标量值函数 打开 ...
- sql server表值函数与标量值函数实际应用
sql中的表值函数与标量值函数区别与用法 一 .表值函数又分为内联函数与多语句函数 (1)内联函数就是没有函数主体表是单个 SELECT. 下面是一个不带输入参数的表值函数 create functi ...
- 浅谈表值函数和标量值函数
表值函数有两种形式: 1.内联表值函数 Create FUNCTION Funtion_name ( --这里定义传入参数以及类型 ) RETURNS TABLE AS RETURN (--这里直接写 ...
- 表值函数和标量值函数
Sql server 的表值函数是返回一个Table类型,table类型相当与一张存储在内存中的一张虚拟表. 实现表值函数很简单: 下面是一个不带输入参数的表值函数 create function t ...
- sqlserver中的表值函数和标量值函数
顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 以下示例: CREATE FUNCTION ...
- 在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...
- php。defined,PHP defined()函数的使用图文详解
PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...
最新文章
- TVM darknet yolov3算子优化与量化代码的配置方法
- Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间
- 两个摄像头是如何将照片拼接在一起的
- android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值
- 《公司理财》_16章_2.财务杠杆学习笔记
- Java读写大文本文件(2GB以上)
- Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法
- 汇编中call printf参数压栈时错误理解
- 腾讯面试Android必问11题,我说的,不信就来看看
- oracle临时表经常被锁_【赵强老师】Oracle数据库的存储结构
- java并发:join源码分析
- 【记】微信支付服务器证书更换通知的验证流程
- 依赖 netty spring_面试官:如何写好一个 Spring 组件?懵圈!
- [转] 客户端的JavaScript脚本中获取服务器端控件的值 及ID
- java中实现下载音乐_如何用JAVA的IO流下载落网音乐?
- python采集数据搭建小说网站_Python制作爬虫采集小说
- 尼康图像处理软件——nx studio
- LoadRunner压力测试实例
- 英特尔hd630驱动_英特尔Iris HD Graphics显卡驱动64位_ intel驱动-PChome下载中心
- maxscale mysql 主从_MariaDB主从配置与MaxScale实现MySQL读写分离