内嵌表值函数

接上 《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. Css定位之absolute_慕课网课程笔记

    absolute和float 绝对定位和浮动有相似之处,即都有破坏性和包裹性,破坏性是指其会导致包裹自身的复原塌陷,包裹性是float的天赋技能,对于绝对定位来说,其会包括子元素 越独立越强大 1.去 ...

  2. [Spring常见问题]java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

    这个问题是因为部署在tomcat下的项目中没有springweb包 但是问题来了,但是我的项目中有呀,maven都引了呀,然后我就懵B啦!看到这个博客我就豁然开朗了:http://my.oschina ...

  3. My family No.1

    Ok, in my family, there are seven people including my father, mother, three sisters, one brother and ...

  4. 3.MongoDB下Windows下的安装

    由于博主目前使用的是Windows的系统,没有使用Linux等其它的系统,因此此安装配置和开发使用,均是在Windows下进行的,以后在使用其它的系统的时候,再将其它系统的配置的使用补充上来. 1.下 ...

  5. html5,表单的综合案例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. CSS颜色代码

    颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十六进制 00).最高值是 255(十六进制 FF).从 0 到 25 ...

  7. 几个js函数

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. N久没写过东西了..写个最近在研究的程序

    import numpy as np import matplotlib.pyplot as plt #a = np.matrix([[1,1.15],[1,1.9],[1,3.06],[1,4.66 ...

  9. 准备学习Spring MVC

    这一系列笔记将带你一步一步的进入Spring MVC,高手勿喷. 首先你得安装以下的工具: JDK,虽然JDK8已经发布了一段时间了,但是由于我们并不会使用到里面的新特性,所以JDK6以上版本皆可以( ...

  10. icon fonts

    iconfont网站 http://www.iconfont.cn(推荐) http://fontello.com/ http://fontawesome.io/   https://icomoon. ...