T-SQL编程 —— 用户自定义函数(内嵌表值函数)

内嵌表值函数

接上 《T-SQL编程 —— 用户自定义函数(标量函数)》

http://www.cnblogs.com/viusuangio/p/6212072.html

  内嵌表值函数可以用于实现参数化视图(查询),例如有一个查询其定义语句如下:

1 use Student
2 GO
3 --查询笔试成绩几个的同学
4 select s.stuno ,s.stuname,s.brithday,e.written,e.lab
5 from StuInfo s left outer join exam e
6 on s.stuno = e.stuno
7 where e.written >=60

  若希望设计更加通用的程序,让用户能够指定查询内容,可将 where e.written >= 60 替换为 where e.written >[email protected], @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数据库(假设已经存在)创建一个查询(一般是一个视图),如果在此查询的基础上定义一个内嵌表值函数。

 1 /*创建视图查询,但不能带参数(如下面注释句)*/
 2 create view Veam as
 3 select s.stuno,s.stuname,s.brithday,e.written,e.lab
 4 from StuInfo s left outer join exam e
 5 on s.stuno = e.stuno
 6 --where writtrn >=60
 7
 8
 9
10 /*改用内嵌表函数可以解决,传入参数,返回带参数的查询*/
11 create function getExams(@written float)
12 returns table as
13 return(
14     select s.stuno,s.stuname,s.brithday,e.written,e.lab
15     from StuInfo s left outer join exam e
16     on s.stuno=e.stuno
17     where written >= @written
18 )

  内嵌表值函数的调用:

  内嵌表值函数只能通过 select 语句调用,内嵌表值函数调用的时候,可以仅仅只使用函数名。

  例如,调用 getExams()函数,查询笔试成绩大于等于70的记录。

1 select * from dbo.getExams(70) 
时间: 2024-08-01 10:42:37

T-SQL编程 —— 用户自定义函数(内嵌表值函数)的相关文章

sql server 创建内联表值函数

表值函数就是返回table 的函数使用它可以方便的进行查询的处理 创建的代码如下: create FUNCTION returunclassfirstlist(  -- Add the parameters for the function here )RETURNS TABLE ASRETURN ( -- Add the SELECT statement with parameter references here select * from classfirst;) 我们在使用创建的函数的时

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

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

Python自学之函数内嵌和闭包

函数内嵌指一个函数内部包含定义另一个函数举例: >> def fun1():print('fun1()正在被调用...')def fun2():print('fun2()正在被调用...')fun2() >> fun1()fun1()正在被调用...fun2()正在被调用...>> fun2()Traceback (most recent call last):File "<pyshell#7>", line 1, in <modu

内联表值函数FUNCTION

创建一个内联表值函数: 1 USE TSQLFundamentals2008; 2 IF OBJECT_ID('dbo.fn_GetCustOrders') IS NOT NULL 3 DROP FUNCTION dbo.fn_GetCustOrders; 4 GO 5 CREATE FUNCTION dbo.fn_GetCustOrders 6 (@cid AS INT) RETURNS TABLE 7 AS 8 RETURN 9 SELECT orderid, custid, empid,

内联表值函数

内联表值函数是一种可重用的表表达式,能够支持输入参数.除了支持输入参数以外,内联表值函数在其他方面都与视图相似.(可以将内联表值函数看作是一种参数化的视图,尽管没有这种正式的说法). 例: CREATE FUNCTION fn_GetCustOrders (@cid as int) RETURNS TABLE AS RETURN SELECT orderid,custid,empid,orderdate,requiredate FROM dbo.Orders WHERE [email prote

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

将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5oz/2oz/3oz') 效果如下: SQL实现表值函数 CREATE FUNCTION [dbo].[splitStr]( @s varchar(max), --待分拆的字符串 @split varchar(10) --数据分隔符 )RETURNS @re TABLE(id int IDENTIT

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

js 如何在函数体内部知道 自己在哪个函数内运行呢? 打比方: function a() { // 我想在这里知道我的函数名a和函数function a () {...} } 使用Error的调用栈可以匹配到当期执行的函数: // 获取正在执行的函数 function getExecFunction() { let names = new Error().stack.match(/at (.*?) /g); let name = names[1].replace('at ', '').trim(

6 JavaScript函数&amp;内置构造&amp;函数提升&amp;函数对象&amp;箭头函数&amp;函数参数&amp;参数的值传递与对象传递

JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. <body> <p>函数存储在变量后,变量可作为函数使用:</p> <p id="demo"></p> <script> var x = function(a,b){return a+b; }; document.g

js函数内嵌函数的整体跳出 .

stop=false; $.ajax({success:function(){ 这里面不能用return false跳出整个<script></script>,只能跳出该处的function, 注意;可以使用stop=true }}); 另起一行使用if (stop) return false: