什么是存储过程

如果你接触过其他的编程语言,那么就好理解了,存储过程就像是方法一样。

竟然他是方法那么他就有类似的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名有存储过程参数也有返回值。

存储过程的优点:

存储过程的能力大大增强了SQL语言的功能和灵活性。

1.可保证数据的安全性和完整性。

2.通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。

3.通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。

4.在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程。

5.可极大地改善SQL语句的性能。

6.可以降低网络的通信量。

7.使体现企业规则的运算程序放入数据库服务器中,以便 集中控制。

存储过程可以分为系统存储过程、扩展存储过程和用户自定义的存储过程

系统存储过程

我们先来看一下系统存储过程,系统存储过程由系统定义,主要存放在MASTER数据库中,名称以"SP"开头或以"XP"开头。尽管这些系统存储过程在MASTER数据库中

但我们在其他数据库还是可以调用系统存储过程。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。

常用系统存储过程有:

代码如下:
exec sp_databases; --查看数据库

exec sp_tables; --查看表

exec sp_columns student;–查看列

exec sp_helpIndex student;–查看索引

exec sp_helpConstraint student;–约束

exec sp_helptext ‘sp_stored_procedures’;–查看存储过程创建定义的语句

exec sp_stored_procedures;

exec sp_rename student, stuInfo;–更改表名

exec sp_renamedb myTempDB, myDB;–更改数据库名称

exec sp_defaultdb ‘master’, ‘myDB’;–更改登录名的默认数据库

exec sp_helpdb;–数据库帮助,查询数据库信息

exec sp_helpdb master;

exec sp_attach_db --附加数据库

exec sp_detach_db --分离数据库

存储过程语法:

在创建一个存储过程前,先来说一下存储过程的命名,看到好几篇讲存储过程的文章都喜欢在创建存储过程的时候加一个前缀,养成在存储过程名前加前缀的习惯很重要,虽然这只是一件很小的事情,但是往往小细节决定大成败。看到有的人喜欢这样加前缀,例如proc_名字。也看到这加样前缀usp_名字。前一种proc是procedure的简写,后一种sup意思是user procedure。我比较喜欢第一种,那么下面所有的存储过程名都以第一种来写。至于名字的写法采用骆驼命名法。

创建存储过程的语法如下:

代码如下:

CREATE PROC[EDURE] 存储过程名@参数1 [数据类型]=[默认值] [OUTPUT]@参数2 [数据类型]=[默认值] [OUTPUT]ASSQL语句EXEC 过程名[参数]

使用存储过程实例:

1.不带参数

代码如下:

create procedure proc_select_officeinfo--(存储过程名)
as select Id,Name from Office_Info--(sql语句)exec proc_select_officeinfo--(调用存储过程)

2.带输入参数

代码如下:

create procedure procedure_proc_GetoffinfoById --(存储过程名)
@Id int--(参数名 参数类型)
as select Name from dbo.Office_Info where Id=@Id--(sql语句)exec procedure_proc_GetoffinfoById 2--(存储过程名称之后,空格加上参数,多个参数中间以逗号分隔)

注:参数赋值是,第一个参数可以不写参数名称,后面传入参数,需要明确传入的是哪个参数名称

DEMO1:

 create proc proc_ta  --不带参数的存储过程asbeginselect [Country],[IATACode] from [Test].[dbo].[Ta]endgoselect * from  [Test].[dbo].[Ta]goexec  proc_ta  --查看存储过程go


DEMO2:

 create proc proc_select_ta(@Country int )as beginselect * from [Test].[dbo].[Ta] where Country=@Country  --带参数的存储过程end

函数

SQL Aggregate 函数

SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

有用的 Aggregate 函数:

AVG() - 返回平均值

SELECT AVG(column_name) FROM table_name

COUNT() - 返回行数

SELECT COUNT(column_name) FROM table_name;

FIRST() - 返回第一个记录的值

SELECT FIRST(column_name) FROM table_name;

LAST() - 返回最后一个记录的值

SELECT LAST(column_name) FROM table_name;

MAX() - 返回最大值

SELECT MAX(column_name) FROM table_name;

MIN() - 返回最小值

SELECT MIN(column_name) FROM table_name;

SUM() - 返回总和

SELECT SUM(column_name) FROM table_name;

SQL Scalar 函数

SQL Scalar 函数基于输入值,返回一个单一的值。

有用的 Scalar 函数:

UCASE() - 将某个字段转换为大写

SELECT UCASE(column_name) FROM table_name;

LCASE() - 将某个字段转换为小写

SELECT LCASE(column_name) FROM table_name;

MID() - 从某个文本字段提取字符,MySql 中使用

SELECT MID(column_name,start[,length]) FROM table_name;

SubString(字段,1,end) - 从某个文本字段提取字符

SELECT SubString(column_name,1,end) FROM table_name;

LEN() - 返回某个文本字段的长度

SELECT LEN(column_name) FROM table_name;

ROUND() - 对某个数值字段进行指定小数位数的四舍五入

SELECT ROUND(column_name,decimals) FROM table_name;

NOW() - 返回当前的系统日期和时间

SELECT NOW() FROM table_name;

FORMAT() - 格式化某个字段的显示方式

SELECT FORMAT(column_name,format) FROM table_name;

区别

1.储存过程可以有返回值也可以无返回值。函数必须有返回值。

2.存储过程的实现比较复杂,而函数的实现比较有针对性。

3.储存过程可以输入输出参数,而函数只可以输入参数。

4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。

5.可以在存储过程中调用函数,不可以在函数中调用存储过程。

SQL存储过程和函数区别(超级简单,人人都可以看懂)相关推荐

  1. Navicat 安装教程(超级简单人人都可以看懂)

    题记:这个是比较老的版本,由于工作中用到的SQLLite小型数据库,所以我安装此版本. Navicat 11 详细安装教程. 软件下载链接:Navicat安装包下载地址 ❶下载并且解压文件夹,然后选择 ...

  2. c语言srand函数怎么用_Excel统计指定内容出现次数,用函数怎么写?人人都能看懂的公式...

    在学习或者工作中,往往会遇到投票的情况,这时候统计投票情况就变得很重要! 下图中,是某个班级对某一道题目给出的结果,每一排4个人.后面的选项是对应每个人选择的答案,因为每个人选择的答案不同,所以需要分 ...

  3. 人人都能看懂LSTM

    这是在看了台大李宏毅教授的深度学习视频之后的一点总结和感想.看完介绍的第一部分RNN尤其LSTM的介绍之后,整个人醍醐灌顶.本篇博客就是对视频的一些记录加上了一些个人的思考. 0. 从RNN说起 循环 ...

  4. 人人都能看懂的Spring源码解析,Spring如何解决循环依赖

    人人都能看懂的Spring源码解析,Spring如何解决循环依赖 原理解析 什么是循环依赖 循环依赖会有什么问题? 如何解决循环依赖 问题的根本原因 如何解决 为什么需要三级缓存? Spring的三级 ...

  5. 人人都能看懂的Spring底层原理,看完绝对不会懵逼

    人人都能看懂的Spring原理,绝对不会懵逼 为什么要使用Spring? Spring的核心组件 Spring是如何实现IOC和DI的? 定义了BeanDefinition 扫描加载BeanDefin ...

  6. 人人都能看懂的LSTMGRU

    看过的讲的最简单明了的: LSTM:人人都能看懂的LSTM GRU:人人都能看懂的GRU 自己对LSTM的理解与代码解释:https://blog.csdn.net/Strive_For_Future ...

  7. 人人都能看懂的EM算法推导

    作者丨August@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/36331115 编辑丨极市平台 估计有很多入门机器学习的同学在看到EM算法的时候会有种种疑惑:EM ...

  8. em算法 实例 正态分布_人人都能看懂的EM算法推导

    ↑ 点击蓝字 关注极市平台作者丨August@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/36331115编辑丨极市平台 极市导读 EM算法到底是什么,公式推导怎么去 ...

  9. nxn次方求和函数_算法|小学生都能看懂的生成函数入门教程

    作者:自为风月马前卒 链接:https://ac.nowcoder.com/discuss/179728 来源:牛客网 前言 第一次当标题党真是有点不适应 现在网上讲生成函数的教程大多都是从 开始,但 ...

  10. SQL SERVER 简单的索引理解(超级简单,人人都可以看懂)

    索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针.数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行. 什么是索引 数 ...

最新文章

  1. Asp.net Mvc视频教程 页面传值基础(get/post/UpdateModel)
  2. python【蓝桥杯vip练习题库】—Huffuman树
  3. Hermite曲线与Bezier曲线的关系
  4. 机器学习中的范数规则化之(二)核范数与规则项参数选择
  5. KMPLAYER无法播放rmvb格式的解决办法
  6. 图表可视化seaborn风格和调色盘
  7. 简单的mysql左链接_简单谈谈mysql左连接内连接
  8. potplayer 多个进程_进程组、会话、控制终端概念,如何创建守护进程?
  9. linux编译安装wine,Ubuntu 13.10 编译安装Wine 1.7
  10. 已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs = {“12345“,“67891“,“12347809933“,“98765432102“,“67891“,“1
  11. iOS 使用FFmpeg
  12. Android Multimedia框架总结(二十一)MediaCodec中创建到start过程(到jni部分)
  13. 【Django 2021年最新版教程21】数据库查询 model 多条数据 queryset转dict字典 返回渲染到前端
  14. easyui图标使用(查找)
  15. 电脑html接口是什么意思,HDMI、DVI 我们的电脑为什么会有这么多种视频接口?
  16. 解决you-get下载视频速度慢和下载MP4文件问题
  17. Failed to resolve:问题的解决方法
  18. 实时可视化大数据项目01 -- 项目介绍
  19. 电子发票全流程电子化管理指南-摘要
  20. 荣耀智慧屏还可以升到鸿蒙2,从荣耀智慧屏到华为智慧屏 “大屏”时代已经拉开...

热门文章

  1. MySQL查询数据详细
  2. 2019Java视频教程-玩转oracle
  3. 【老生谈算法】matlab遗传算法工具箱源码——遗传算法
  4. TTF字体文件内容获取
  5. virtualbox增强功能-VBoxGuestAdditions安装
  6. WAPPUSH 原理 基于短信网关WAP推送的实现
  7. lcd1602c显示温度语言编程,单片机+lcd1602显示温度汇编语言程序-精确到0.0625度
  8. 用友账套和报表服务器显示不同,用友T3ufo报表提示“服务器出现意外情况”
  9. android:digits 代码设置,EditText中android:digits失效问题
  10. tmb100a linux,天猫魔盒TMB100E短接降级官方1.7版本