• 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)浅析

  • 相关阅读:
    XAF 有条件的对象访问权限
    XAF 顯示 UnInplace Report(設置自定義條件顯示報表,不是根據選擇ListView記錄條件顯示報表)
    XAF 如何自定义PivotGrid单元格显示文本?
    XAF 如何布局详细视图上的按钮
    XAF How to set size of a popup detail view
    XAF Delta Replication Module for Devexpress eXpressApp Framework
    XAF 帮助文档翻译 EasyTest Basics(基础)
    XAF 用户双击ListView记录时禁止显示DetailView
    XAF How to enable LayoutView mode in the GridControl in List Views
    XAF 如何实现ListView单元格批量更改?
  • 原文地址:https://www.cnblogs.com/cnki/p/9521669.html
Copyright © 2020-2023  润新知