内嵌表值函数

接上 《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编程 —— 用户自定义函数(内嵌表值函数)的更多相关文章

  1. SQL Server进阶(六)表表达式--派生表、公用表表达式(CTE)、视图和内联表值函数

    概述 表表达式是一种命名的查询表达式,代表一个有效地关系表.可以像其他表一样,在数据处理中使用表表达式. SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数. 为什么 ...

  2. SQL Server 表表达式--派生表、公用表表达式(CTE)、视图和内联表值函数

    概述 表表达式是一种命名的查询表达式,代表一个有效地关系表.可以像其他表一样,在数据处理中使用表表达式. SQL Server支持四种类型的表表达式:派生表,公用表表达式,视图和内联表值函数. 为什么 ...

  3. SQL Server标量函数改写内联表值函数优化案例

    问题SQL: SELECT TOP 1001 ha.HuntApplicationID , ha.PartyNumber , mht.Name AS MasterHuntTypeName , htly ...

  4. 函数:内嵌函数和闭包 - 零基础入门学习Python020

    函数:内嵌函数和闭包 让编程改变世界 Change the world by program 内嵌函数和闭包 接下来这两节课我们谈的话题可能会"比较高级",所以如果是零基础的朋友, ...

  5. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  6. PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)

    将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...

  7. sql server 创建内联表值函数

    表值函数就是返回table 的函数使用它可以方便的进行查询的处理 创建的代码如下: create FUNCTION returunclassfirstlist(  -- Add the paramet ...

  8. Sql CLR创建一个简单的表值函数

    1.创建面目: 2. 添加函数代码: using System; using System.Data.Sql; using Microsoft.SqlServer.Server; using Syst ...

  9. node.js 在函数内获取当前函数

    js 如何在函数体内部知道 自己在哪个函数内运行呢? 打比方: function a() { // 我想在这里知道我的函数名a和函数function a () {...} } 使用Error的调用栈可 ...

随机推荐

  1. 在 Apache Ant中设置Proxy服务器

    <target name="proxy"> <property name="proxy.host" value="https://m ...

  2. 使用nginx-http-concat添加nginx资源请求合并功能

    web项目中有时候一个页面会加载多个js或css资源请求,导致页面加载耗时较长,这时优化的方向可以采用资源合并,可以在客户端事先合并,也可以在服务端进行资源合并,服务端合并的方式使用起来更灵活. ng ...

  3. ps commad

    要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1)         ps :是显示瞬间进程的状态,并不动态连续: (2)         top:如果想对进 ...

  4. 配置Maven环境并创建简单的web项目步骤

    Maven的介绍 主要包含以下三个内容: 1.POM(Project Object Model):即An xml file(pom.xml):依赖管理.生命周期和插件的需要等都在pom.xml文件中完 ...

  5. SQLServer中用先进先出思想求成本价和平均成本单价

    1.首先是创建表: create table #in ( id ,), TDate datetime not null, goodcode ) , InNum ,) null, --入库数量 Pric ...

  6. iframe

    var ifr = document.getElementById('ifr'); var win = ifr.window || ifr.contentWindow; win.a(); // 调用i ...

  7. HAL驱动库学习-ADC

    如何使用ADC驱动库 1  实现如下两个函数     a: HAL_ADC_MspInit()使能ADC时钟,设置时钟源, 使能ADC Pin,设置为输入模式,可选 DMA,中断     b:HAL_ ...

  8. [原创]Visual Studio 使用 Just My Code引起无法断点

    今天遇到的问题,同样的代码,在一台机器上用Release配置可以命中断点,在另一台上用Release断点就都失效了.后来发现是因为断点失效的机器上设置了Just My Code.在Debug-Opti ...

  9. django和apache交互的wsgi分析

    很多django程序员会用django进行web程序的开发,会用django的命令行命令进行程序的调试,但不会将simpleserver换成apache的配置,也有很多django程序员知道怎么用ws ...

  10. Ruby中 Include, Extend, Import, Require 的使用区别

    Include 如下例当你Include一个模块到某个类时, 相当于把模块中定义的方法插入到类中.它允许使用 mixin.它用来 DRY 你的代码, 避免重复.例如, 当你有多个类时, 需要相同的函数 ...