T-SQL编程 —— 用户自定义函数(内嵌表值函数)
内嵌表值函数
接上 《T-SQL编程 —— 用户自定义函数(标量函数)》
http://www.cnblogs.com/viusuangio/p/6212072.html
内嵌表值函数可以用于实现参数化视图(查询),例如有一个查询其定义语句如下:
use Student
GO
--查询笔试成绩几个的同学
select s.stuno ,s.stuname,s.brithday,e.written,e.lab
from StuInfo s left outer join exam e
on s.stuno = e.stuno
where e.written >=60
若希望设计更加通用的程序,让用户能够指定查询内容,可将 where e.written >= 60 替换为 where e.written >=@para, @para用于传递参数,但是视图查询不支持在wherea语句中指定搜索条件参数,为解决这样的一个问题,可以使用内嵌值函数。
内嵌表值函数的定义:
create function [owner_name.] function_name
([{@parameter_name [as] scalar_parameter_data_type [default]}[,n..]])
returns table [with encryption] [as]
return [(select_stmt)]
其中各个选项的含义如下:
- owner_name:数据库所有者名
- function_name:用户定义函数名,函数名必须符合标识符规则,对其所有者来说,该用户在数据库中必须是唯一的。
- @parameter_name:用户定义函数的形参名, create function 语句中可以申明一个或多个参数,用@符号作为第一个字符来指定形参名 ,每个函数的参数局部作用于该函数。
- scalar_parameter_data_type:参数的数据类型,可为系统支持的基本标量类型,不能为 timestamp 类型、用户定义数据类型、非标量类型(如 cursor 和 tabel)。
- default:指定默认值。
- returns table:此句仅包含关键字table ,表示此函数返回一个表。
- with 子句指出了创建函数的选项,如果指出了 encryption 参数,则创建的函数是被加密的,函数定义的文本将以不可读的形式存储在 syscomments 表中,任何人都不能查看该函数的定义,包括函数的创建者和系统管理员。
- return [(select_stmt)]:内嵌表值函数的函数体仅有一个return语句,并通过参数 select_stmt 指定的 select 语句返回内嵌值。
例如:在student数据库(假设已经存在)创建一个查询(一般是一个视图),如果在此查询的基础上定义一个内嵌表值函数。
/*创建视图查询,但不能带参数(如下面注释句)*/
create view Veam as
select s.stuno,s.stuname,s.brithday,e.written,e.lab
from StuInfo s left outer join exam e
on s.stuno = e.stuno
--where writtrn >=60 /*改用内嵌表函数可以解决,传入参数,返回带参数的查询*/
create function getExams(@written float)
returns table as
return(
select s.stuno,s.stuname,s.brithday,e.written,e.lab
from StuInfo s left outer join exam e
on s.stuno=e.stuno
where written >= @written
)
内嵌表值函数的调用:
内嵌表值函数只能通过 select 语句调用,内嵌表值函数调用的时候,可以仅仅只使用函数名。
例如,调用 getExams()函数,查询笔试成绩大于等于70的记录。
select * from dbo.getExams(70)
T-SQL编程 —— 用户自定义函数(内嵌表值函数)的更多相关文章
- SQL Server进阶(六)表表达式--派生表、公用表表达式(CTE)、视图和内联表值函数
概述 表表达式是一种命名的查询表达式,代表一个有效地关系表.可以像其他表一样,在数据处理中使用表表达式. SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数. 为什么 ...
- SQL Server 表表达式--派生表、公用表表达式(CTE)、视图和内联表值函数
概述 表表达式是一种命名的查询表达式,代表一个有效地关系表.可以像其他表一样,在数据处理中使用表表达式. SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数. 为什么 ...
- SQL Server标量函数改写内联表值函数优化案例
问题SQL: SELECT TOP 1001 ha.HuntApplicationID , ha.PartyNumber , mht.Name AS MasterHuntTypeName , htly ...
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
函数:内嵌函数和闭包 让编程改变世界 Change the world by program 内嵌函数和闭包 接下来这两节课我们谈的话题可能会"比较高级",所以如果是零基础的朋友, ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
- PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)
将字符串分割为表表经常用到,这里 SQL表值函数与CLR 表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...
- sql server 创建内联表值函数
表值函数就是返回table 的函数使用它可以方便的进行查询的处理 创建的代码如下: create FUNCTION returunclassfirstlist( -- Add the paramet ...
- Sql CLR创建一个简单的表值函数
1.创建面目: 2. 添加函数代码: using System; using System.Data.Sql; using Microsoft.SqlServer.Server; using Syst ...
- node.js 在函数内获取当前函数
js 如何在函数体内部知道 自己在哪个函数内运行呢? 打比方: function a() { // 我想在这里知道我的函数名a和函数function a () {...} } 使用Error的调用栈可 ...
随机推荐
- (转载)Resin安装配置及使用教程
Resin是一个提供高性能的,支持 Java/PHP 的应用服务器.目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者.开发人员和低流量网站使用:一种是收费的专业版本,增加了一些更加适用于生产 ...
- TT3
crm_kfs_fy 房源 dk_sq_cs 申请测算 dk_zh 贷款账户 dk_ht 借款合同 SS_DICT_MX 数据字典明细 ...
- JS限制input输入的为数字并且有小数的时候最多保留两位小数
JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...
- 使用AutoIT对增加和删除文件属性的实现
编写历程: 前段日子,晚上下班回家,一个舍友问我可不可以将一个目录下的隐藏文件全部显示出来(变成非隐藏文件),我说可以. 之后就开始大刀阔斧的寻找方法来做这件事,上网找,说需要一个Windows下的小 ...
- Hdu 1081 To The Max
To The Max Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- app推送中的通知和消息区别
最近在做mqtt及其他消息推送的功能,推送服务挺多的,小米推,极光推,华为推,个推等,当然还有苹果的apns.感觉都差不多,尝试了apns,小米推和个推,各个厂家都提供的有sdk,demo. 关于通知 ...
- Cef 架构
cef支持各种语言和多种操作系统.在设计的时候充分考虑了性能和易用性.cef核心功能提供了c和c++的接口.cef提供了和主程序之间的通信能力(利用 custom plugins, protocols ...
- URL跳转的几种方式
1.HTML: ①. <head> <!-- 以下方式只是刷新不跳转到其他页面 --> <meta http-equiv="refresh" cont ...
- CopyFile类通过调用这个类的delete(String filePath)方法可以组合成一个Cut类
package folderoperation; import java.io.File;/** * 注意它会删除文件,文件夹以及文件夹下的所有内容(根据指定的地址) * @author Dawn * ...
- asp.net页面生命周期请求管道19个事件
HttpContext: ecb→ HttpWorkerRequest→HttpContext HttpApplicationFactory.获取了HttpApplication实例之后. (1)Be ...