概述

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

SQL Server进阶(十二)函数的更多相关文章

  1. SQL Server进阶(二)字段类型

    概述 系统数据类型详情 SqlDbType namespace System.Data { // // 摘要: // 指定要用于 System.Data.SqlClient.SqlParameter ...

  2. SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...

  3. SQL Server 进阶 01 数据库的设计

    SQL Server 进阶 01 数据库的设计 本篇目录 课程内容回顾及介绍 为什么需要规范的数据库设计 设计数据库的步骤 绘制E-R(实体-关系)图 实体-关系模型 如何将E-R图转换为表 数据规范 ...

  4. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...

  5. 【目录】sql server 进阶篇系列

    随笔分类 - sql server 进阶篇系列 sql server 下载安装标记 摘要: SQL Server 2017 的各版本和支持的功能 https://docs.microsoft.com/ ...

  6. sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值

    采用c#开发dll,并添加到sql server 中. 具体代码,可以用visual studio的向导生成模板. using System; using System.Collections; us ...

  7. ylb:SQL Server中的时间函数

    ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1.   当前系统日期 ...

  8. SQL Server中的DATEPART函数的使用

    下面文章来自:http://blog.csdn.net/hello_world_wusu/article/details/4632049 定义和用法 DATEPART() 函数用于返回日期/时间的单独 ...

  9. 刷新SQL Server所有视图、函数、存储过程

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

  10. 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

随机推荐

  1. Python变量与赋值

    Python是一门独特的语言,与C语言有很大区别,初学Python很多萌新表示对变量与赋值不理解,学过C的都知道,给变量赋值时,需要先指定数据类型,同时会开辟一块内存区域,用于存储值,例如: int ...

  2. Uva796 Critical Links

    用tarjan缩点 然后用dfn[u] < low[v]缩点并且保存起来 在sort一遍输出 #include<stdio.h> #include<string.h> # ...

  3. 学习笔记:fhq-treap

    0. 前置知识:\(treap\)的定义 树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树. ​ >--摘自百度百科 形象化 ...

  4. kafka清理数据日志

    背景问题: 使用kafka的路上踩过不少坑,其中一个就是在测试环境使用kafka一阵子以后,发现其日志目录变的很大,占了磁盘很大空间,定位到指定目录下发现其中一个系统自动创建的 topic,__con ...

  5. centos7下安装vnc更改vnc默认端口号

    应用场景:某些情景下,需要用的linux的桌面环境,Ubuntu的桌面性能在linux发行版中算是数一数二的,如果不熟悉Debian系统,Centos/RHEL系列也行:   我这里的场景是开发人员不 ...

  6. Python3 与 C# 并发编程之~进程先导篇

      在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...

  7. A1119. Pre- and Post-order Traversals

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  8. request 的介绍使用属性

    上下文:相当于一个容器,保存了 Flask 程序运行过程中的一些信息. Flask中有两种上下文,请求上下文和应用上下文 请求上下文(request context) 在 flask 中,可以直接在视 ...

  9. 最短路 次短路 k短路(k很小)

    最短路 luogu 3371 https://www.luogu.org/problemnew/show/P3371 #include <cstdio> #include <cstd ...

  10. java中一维数组的定义和遍历

    public class ArrayDemo1{ public static void main(String[] args){ //1 定义数组 并同时赋值 int[] arr = new int[ ...