多语句表值函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多语句表值函数
定义
多语句表值函数也称为多声明表值型函数,可以看作标量型和内联表值型函数的结合体。
它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值的表中的数据是由函数体中的语句插入的。
可以进行多次查询,对数据进行多次筛选与合并弥补了内嵌表值型函数的不足。语法
创建语法如下:
CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
< function_option > ::=
{ ENCRYPTION | SCHEMABINDING }
< table_type_definition > ::=
( { column_definition | table_constraint } [ ,...n ] )
COMPUTE [BY]子句的介绍
COMPUTE [BY] 子句用于SELECT查询中,既可查看结果明细,也可查看汇总信息。
COMPUTE 所生成的汇总值在查询结果中显示为单独的结果集。当 COMPUTE 带有可选的 BY 子句时,符合 SELECT 条件的每个组都有两个结果集:
∙每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。
∙每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。
当 COMPUTE 不带可选的 BY 子句时,SELECT 语句有两个结果集:
∙每个组的第一个结果集是包含选择列表信息的所有明细行。
∙第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。
举例:查询所有清华大学出版社出版书籍的记录,并统计购买这些书籍的总价格。SELECT*
FROM图书明细表
WHERE出版社='清华大学出版社'
ORDER BY定价desc
COMPUTE SUM(定价)
例题:
设有图书管理数据库,包含三张表:
图书明细表(图书编号,图书类别,图书名称,作者,出版社,出版日期,定价)
读者表(借书证号,姓名,系别,办证日期)
借出信息表(借出编号,借书证号,图书编号,借出日期)
完成下列操作:
1. 列出计算机类图书的书号、名称及价格,最后求出册数和总价格。
2.定义一个多语句表值函数,用于查询学生借书情况,只需提供参数:借书证号,就可以通过调用函数返回此学生的借书情况,若有借书籍,则返回所借书籍的编号、书籍名称、定价和借书日期;若没有在借书籍,则返回记录为空。
CREATE FUNCTION jsqk(@jszh char(20))
RETURNS @jsqkb TABLE
(书籍编号char(20),
书籍名称char(50),
定价float,
借书日期datetime)
AS
BEGIN
INSERT @jsqkb
SELECT图书明细表.图书编号,图书名称,定价,借书日期
FROM 读者表,借出信息表,图书明细表
WHERE 读者表.借书证号=借出信息表.借书证号AND 借出信息表.图书编号=图书明细表.图书编号AND读者表.借书证号=@jszh RETURN
END
GO