顾名思义:表值函数返回的是表,而标量值函数可以返回基类型

  1. 表值函数

用户定义表值函数返回 table 数据类型。对于内联表值函数,没有函数主体;表是单个 SELECT 语句的结果集。

以下示例创建了一个内联表值函数。此函数的输入参数为客户(商店)ID,而返回 ProductIDName 以及 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.标量值函数


写一个标量值函数
ALTER FUNCTION [dbo].[testGetSubNodes_]
(
 @nodeId int
)
RETURNS int
AS
BEGIN
    declare @nodeCount int
 select @nodeCount=5 from MenuTree
    return @nodeCount
END
这个函数很简单返回一个整型值,然后就可以在存储过程中调用了,不过调用的方式有所不同,象上面的表值函数调用是不需要所有者的,只要写函数名称就可以,对于标量值函数来说,是需要加上所有者的,比如所有者是dbo
select dbo.testGetSubNodes_,这样就可以返回5,如果不加dbo,那sql会不认识这个函数。

表值函数,标量值函数详解相关推荐

  1. python3主函数返回值_Python 详解基本语法_函数_返回值

    Python 详解基本语法 概要: 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序作出进一步的操作.可以说是函数的返回值令 ...

  2. Python return函数返回值(详解)

    文章目录 Python return函数返回值 Python return函数返回值 到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束.但实际上,在某些场景中,我们还需函数将处理 ...

  3. SQL Server 2008 创建标量值函数、存储过程

    在运用数据库的过程中,需要用到标量值函数以及存储过程. 仅以SQL Server 2008为例,对标量值函数以及存储过程的流程进行说明(标量值函数以及存储过程当中的代码不在这里讲述) 标量值函数 打开 ...

  4. sql server表值函数与标量值函数实际应用

    sql中的表值函数与标量值函数区别与用法 一 .表值函数又分为内联函数与多语句函数 (1)内联函数就是没有函数主体表是单个 SELECT. 下面是一个不带输入参数的表值函数 create functi ...

  5. 浅谈表值函数和标量值函数

    表值函数有两种形式: 1.内联表值函数 Create FUNCTION Funtion_name ( --这里定义传入参数以及类型 ) RETURNS TABLE AS RETURN (--这里直接写 ...

  6. 表值函数和标量值函数

    Sql server 的表值函数是返回一个Table类型,table类型相当与一张存储在内存中的一张虚拟表. 实现表值函数很简单: 下面是一个不带输入参数的表值函数 create function t ...

  7. sqlserver中的表值函数和标量值函数

    顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 以下示例: CREATE FUNCTION ...

  8. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  9. php。defined,PHP defined()函数的使用图文详解

    PHP defined()函数的使用图文详解 PHP defined() 函数 例子 定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语 ...

最新文章

  1. TVM darknet yolov3算子优化与量化代码的配置方法
  2. Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间
  3. 两个摄像头是如何将照片拼接在一起的
  4. android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值
  5. 《公司理财》_16章_2.财务杠杆学习笔记
  6. Java读写大文本文件(2GB以上)
  7. Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法
  8. 汇编中call printf参数压栈时错误理解
  9. 腾讯面试Android必问11题,我说的,不信就来看看
  10. oracle临时表经常被锁_【赵强老师】Oracle数据库的存储结构
  11. java并发:join源码分析
  12. 【记】微信支付服务器证书更换通知的验证流程
  13. 依赖 netty spring_面试官:如何写好一个 Spring 组件?懵圈!
  14. [转] 客户端的JavaScript脚本中获取服务器端控件的值 及ID
  15. java中实现下载音乐_如何用JAVA的IO流下载落网音乐?
  16. python采集数据搭建小说网站_Python制作爬虫采集小说
  17. 尼康图像处理软件——nx studio
  18. LoadRunner压力测试实例
  19. 英特尔hd630驱动_英特尔Iris HD Graphics显卡驱动64位_ intel驱动-PChome下载中心
  20. maxscale mysql 主从_MariaDB主从配置与MaxScale实现MySQL读写分离

热门文章

  1. vmware 静态ip上网 防止切换网络换ip
  2. 【FFmpeg杂记】音频解码输出PCM格式数据分析
  3. halcon之NCC匹配
  4. 《深度学习》(美)Ian Goodfellow 花书简要笔记(第二部分:深度网络)
  5. mac系统下word和excel设置文件打开密码,输入密码才能打开文件
  6. nyoj1238 最少换乘 最短路
  7. matlab版本转换
  8. 如何利用EndNote,在word中插入参考文献
  9. spring加载xsd文件
  10. Oracle数据库Timestamp数据差值计算Sql语句