zoukankan      html  css  js  c++  java
  • SQL Server进阶(十二)函数--表值函数、标量值函数、聚合函数、系统函数

    概述

    1. 函数有且只有一个输入参数和一个返回值,而存储过程没有这个限制;
    2. 返回表变量的函数可以当做VIEW或者临时表用在WHERE/HAVING/SELECT/JOIN语句中而存储过程不可以;
    3. 存储过程中可以使用try-catch块和事务,而函数中不可以

    表值函数

    表值函数主要用于数据计算出来返回结果集,可以带参数(和视图的一个大的区别)

    用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集。

    创建

    CREATE FUNCTION Fun_GetStudents ( @age INT )--参数
    RETURNS TABLE  --返回类型为表
    AS
    RETURN
        ( SELECT    *
          FROM      dbo.Student
          WHERE     Sage = @age   --通过一条sql查询语句获取表中数据
        );

    调用

    SELECT  * FROM    Fun_GetStudents(18);

    注意:

    (1)只能返回Table,returns后边一定是table

    (2)as后面没有begin/end,只有一个return语句返回特定的记录

    标量值函数

     创建

    CREATE FUNCTION [dbo].[FUN_DataFormat] ( @strDate DATETIME )
    RETURNS VARCHAR(20)
    AS
        BEGIN
            DECLARE @date VARCHAR(20);
            SET @date = DATENAME(YY, @strDate) + ''
                + CONVERT(VARCHAR, MONTH(@strDate)) + ''
                + CONVERT(VARCHAR, DAY(@strDate)) + '';
            RETURN @date;
        END;

    调用

    select dbo.FUN_DataFormat(getdate())

    注意:

    (1)必须使用两部分组成函数的名字来调用函数,即所有者.对象名,如dbo.F3_GetMax(2,3)

    (2)所有的传入参数前必须加@

    (3)不要写漏和写错关键字,如as,returns,return

    (4)returns后面不是跟一个变量,而是跟变量的返回值类型

    (5)在begin/end语句块中,使用的是return

    聚合函数

    常见的几个聚合函数

    1、 求个数:count

    2、 求总和:sum

    3、 求最大值:max

    4、 求最小值:min

    5、 求平均值:avg

    系统函数

     

    sql中的表值函数与标量值函数区别与用法

    通俗来讲:听名字就知道区别了 

    表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂;
    标量值函数返回的只是一个值

    一 、表值函数又分为内联函数与多语句函数

    (1)内联函数就是没有函数主体表是单个 SELECT。

    下面是一个不带输入参数的表值函数
    create function tvpoints()
    returns table
    as 
    return
    (
    select * from tb_users
    );

    (2)下面是带参的内联表值函数

    对于多语句表值函数,在 BEGIN...END 语句块中定义的函数体包含一系列 Transact-SQL 语句,这些语句可生成行并将其插入将返回的表中。
    以下示例创建了一个表值函数.
    create function tvpoints()
    returns @points table (x float, y float)
    as begin
    insert @points values(1,2);
    insert @points values(3,4);
    return;
    end

    (3)标量函数(返回一个具体类型的值而不是一张表了)

    CREATE FUNCTION FUN_DataFormat (@strDate datetime)  
    RETURNS varchar(20)  AS  
    BEGIN 
        
        declare @date varchar(20)
          set @date = DATENAME(YY,@strDate)+''+Convert(VARCHAR,MONTH(@strDate))+''+Convert(VARCHAR,DAY(@strDate))+''
        return @date
    END

    可以通过select dbo.FUN_DataFormat(getdate())来使用。(用的时候一定要在函数前面添加一个dbo或者的话数据库语句报错的会提示不认识的)

    在SQL 2012基础教程中列出子句是按照以下顺序进行逻辑处理

    FROM
    WHERE
    GROUP BY
    HAVING
    SELECT
    ORDER BY
    IF EXISTS (SELECT 1  FROM  TableName WHERE  UserCode = @UserCode)
                                  BEGIN
                                      UPDATE TableName
                                      SET    NotPushBeginTime = @NotPushBeginTime,
                                             NotPushEndTime = @NotPushEndTime
                                      WHERE  UserCode = @UserCode
                                  END
                                ELSE
                                  BEGIN
                                      INSERT INTO TableName
                                                  (UserCode,
                                                   NotPushBeginTime,
                                                   NotPushEndTime,
                                                   CreateTime)
                                      VALUES     (@UserCode,
                                                  @NotPushBeginTime,
                                                  @NotPushEndTime,
                                                  Getdate())
                                 END

    资料

    https://blog.csdn.net/lvyanqin2013/article/details/78721239

    SQL Server 中WITH (NOLOCK)浅析

  • 相关阅读:
    lamp
    ssh 交互脚本
    mysql 备份检测主从脚本
    RANDOM 猜数字脚本
    ansible+playbook 搭建lnmp环境
    集群搭建
    grafana
    nginx lnmp搭建
    shell 基础(1): 变量
    seq 增量输出命令
  • 原文地址:https://www.cnblogs.com/cnki/p/9521669.html
Copyright © 2011-2022 走看看