• sql函数


    用户自己定义的函数可以分为如下三个类别:

    (1)       返回值为可更新表的函数,这样的函数称为内嵌表值函数;

    (2)       返回不可更新表的函数,这样的函数称为多语句表值函数;

    (3)       返回标量值的函数

    注意:用户自定义函数不支持输出函数。

    6.5.1 标量函数的定义

    Create function owname_name, function_name

    (@parameter_name as data_type,….)

    Returns data_type

    [with encryption | schemabinding.]

    [as]

    Begin

           …

    End

    例子:/*计算全体学生某们功课的平均成绩*/

    create function average

    (@cnum char(20))

    returns int

    as

    begin      

           declare @aver int

           select @aver=

           (select avg(score) from xs_kc where kc_id=@cnum group by kc_id)

           return @aver

    end

    6.5.2标量函数的调用

    (1)在select语句中调用

    例子:/*在select语句中调用*/

    declare @course1 char(20)

    declare @aver1 int

    select @course1='101'

    select @aver1=dbo.average(@course1)

    select @aver1 as '101课程的平均成绩'

    (2)利用EXEC语句执行

    例子:/*exec语句中调用*/

    declare @course1 char(20)

    declare @aver1 int

    select @course1='101'

    exec @aver1=dbo.average @course1

    select @aver1 as '101课程的平均成绩'

    例子:/*新建course表*/

    use xscj

    create table course

    (cno int

    ,cname nchar(20)

    ,credit int

    ,aver as (dbo.average(cno))

    )

    6.5.3 内嵌表值函数

    内嵌表值函数可用于实现参数化视图。

    /*内嵌表值函数的定义*/

    create function fn_view1

    (@para nvarchar(30))

    returns table

    as

    return

           (

           select stu_id,stu_name from xscj.dbo.xs where stu_major=@para

           )

    /*内嵌表值函数的调用*/

    select * from fn_view1(N'计算机')

    6.5.4 多语句表值函数

    内嵌表值函数和多语句表值函数都返回表,二者不同之处在于:内嵌表值函数没有函数主体,返回的表是单个select语句的结果集;而多语句表值函数在begin…end块中定义的函数主体包含T-SQL语句,这些语句可生成行并将行插入至表中,最后返回表。

    例子:/*创建返回table的函数,通过学号作为实参调用该函数,可显示该学生各门功课的成绩和学分*/

    Create function score_table

    (@student_id char(6))

    returns @score table

    (xs_id char(6)

    ,xs_name char(8)

    ,kc_name char(16)

    ,cj tinyint

    ,xf tinyint

    )

    as

    begin

           insert @score

           select s.stu_id,s.stu_name,p.kc_name,p.kc_credit,o.score

           from xs as s

           inner join xs_kc as o on (s.stu_id=o.stu_id)

           inner join kc as p on (o.kc_id=p.kc_id)

           where s.stu_id=@student_id

           return

    end

    /*多语句表值函数的调用*/

    select * from score_table('001103')

  • 相关阅读:
    gdb调试的基本使用
    重构改善代码--代码的坏味道
    17级单片机期中测试题目
    左右固定,中间自适应的三栏式布局五种写法
    存一些可能会用得到的vue的UI框架
    vue父子组件传值
    [Vue warn]: Missing required prop: "title"
    js中的值类型和引用类型的区别
    vue+node+mongoDB 火车票H5(四)---完成静态页面
    vue+node+mongoDB 火车票H5(三)---git提交时忽略不想提交的文件
  • 原文地址:https://www.cnblogs.com/itecho/p/1306027.html
Copyright © 2020-2023  润新知