很多程序员朋友都视sql为洪湖水猛兽,其实深入分析一下,多用些时间与耐心,sql还是可以理解的。

本文主要是针对刚刚接触sql的新手朋友,进行一个sql存储过程的简单分享。

小子第一次发布文章,也是借鉴各位前辈的结晶所得,发布本文的目的也是希望帮助更多想要学习数据库的人。

文章开始

首先要了解什么是存储过程?

存储过程就是作为可执行对象存放在数据库中的一个或多个sql命令。 
通俗来讲:存储过程其实就是能完成一定操作的一组sql语句。

存储过程的优势:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般sql语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

存储过程的具体使用方法如下:
首先,在本地数据库中新建一张表product,并添加了一些数据进行测试,方便读者理解。

以下通过表product来了解存储过程,因为目的是了解存储过程的简单用法,所以所有例子均很简单。

表product共有字段4个,分别为proId,proName,proPrice,createTime

如图:

首先介绍无参数的存储过程:
选出product表中的所有信息,

create proc proproc  --proc是关键字(proc等同于procedure) proproc为自定义存储过程名
as --此处 as 不可以省略不写
begin --begin 和 end 成对出现,可以都不写,但不能只出现一个

select proId,proName,proPrice,createTime from product
end
go

--现在执行此语句创建的存储过程proproc

exec proproc --exec 执行已有存储过程的关键字 proproc是要执行的存储过程名

执行结果如下

进行到这里,存储过程proproc已经保存在数据库中,以下将对存储过程proproc进行修改。

有参数存储过程:
全局变量
全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
选出指定商品名的商品信息:

alter proc proproc  --alter修改存储过程的关键字
@proName varchar(50) 
as 
begin
select proId,proName,proPrice,createTime from product where proName=@proNameend
go

exec proproc '面包'    --’面包’是作为参数传给存储过程进行使用的,存储过程会根据用户传入的参数,返回结果

如图

以上是在外部给变量赋值,也可以在内部直接给变量设置默认值

alter proc proproc
@proName varchar(50)='面包'
as 
begin
select proId,proName,proPrice,createTime from product where proName=@proName 
end
go

exec proproc --因为参数在内部已经确定,所以执行存储过程不再需要传入参数

结果如下:

也可以把变量的值输出,使用output --与C#中的out相似

alter proc proproc
@proName varchar(50),

@bool int output //传出参数
as 
if exists (select proId,proName,proPrice,createTime from product where proName=@proName )
set @bool=1
else
set @bool=0
go

目的:如果表中有商品’可乐‘ 则显示1 否则显示0
declare @bool  int --先声明

exec proproc '可乐' , @bool  output

select @bool

结果如下

以上是全局变量,下面了解局部变量。
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
局部变量的定义:必须先用declare声明以后才可以使用,declare{@变量名 数据类型}
局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
局部变量的显示:select @变量名

alter proc proproc
as 
declare @proName varchar(50)
set @proName ='毛巾'
select proId,proName,proPrice,createTime from product where proName=@proName

go

exec proproc

结果如下

显示局部变量的方法:

alter proc proproc
as 
declare @proName varchar(50)
set @proName=(select product.proName from product where proid=01 )

select @proname
go

exec stuproc

结果如下

本文只是简单的介绍了sql存储过程,本人也会继续学习,如果有所得,也会继续分享。

如果本文对你有所帮助,希望你能把已有的知识分享给更多的人,终。

sql简单存储过程分享的更多相关文章

  1. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  2. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  3. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...

  4. [深圳/广州]微软SQL技术沙龙分享会(MVP)

    [深圳/广州] 新一期俱乐部活动报名开始,这次是广深地区SQL Server 技术沙龙分享会(MVP),SQL Server作为一个数据平台,不管是SQL Server 2017 on Linux 还 ...

  5. Yii2.0调用sql server存储过程并获取返回值

    1.首先展示创建sql server存储过程的语句,创建一个简单的存储过程,测试用. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE P ...

  6. SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过

    存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...

  7. SQL Server存储过程 对数组参数的循环处理

    方法一 分割 例:通过SQL Server存储过程传送数组参数删除多条记录 eg. ID 值为'1,2,3' 以下存储过程就是删除表中id号为1,2,3的记录: CREATE PROCEDURE De ...

  8. (2.11)Mysql之SQL基础——存储过程与变量

    (2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...

  9. sql 在存储过程中使用事务(转)

    本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...

随机推荐

  1. 2019牛客暑期多校训练营(第六场) H:Train Driver (最短路+概率)

    题意:给定无向图,Alice在A集合选一个点,Bob在B集合选一个点,CXK在全集里选择一个点. 然后问“三人到某一点集合打篮球的最小距离”的期望. 思路:做过一个裸题,就是给定三人位置,问去哪里集合 ...

  2. input提示字在有焦点消失或输入改变时消失

    一:获取焦点时 提示字消失 <input type="text" name="textfield" value="这里是提示内容" o ...

  3. router.beforeEach、路由元信息、导航守卫与函数式编程

    一.函数的识别: 1.router.beforeEach:主函数.高阶函数.入口函数: 2.匿名参量函数:处理跳转过程中的附加逻辑 (to, from, next) => { if (to.ma ...

  4. HDU 6595 Everything Is Generated In Equal Probability (期望dp,线性推导)

    Everything Is Generated In Equal Probability \[ Time Limit: 1000 ms\quad Memory Limit: 131072 kB \] ...

  5. MongoDB shell 0 集合方法

    方法名 描述 db.collection.aggregate() 聚合,主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果 db.collection.bulkWrite() 批量写入 ...

  6. ABP 02 解决 界面为英文

    原文:https://www.cnblogs.com/wswind/p/10313968.html 1.直接改数据库 2.在数据迁移前,更改默认值 注意: 我的项目已经初始化了,数据库已经都生成好了, ...

  7. RookeyFrame 一些心得 或者 调试技巧等

    因为没有依赖具体的实现层,类库的输出路径又没有设置在web层的bin目录,所以每次都要拷贝实现层的DLL过去,有时候拷贝过去了还是没有反应,估计是缓存什么的吧, 解决:先那几个web层bin目录的 D ...

  8. luogu P2353 背单词

    二次联通门 : luogu P2353 背单词 一眼看过去, 卧槽,AC自动机板子题 写完后T成SB 卧槽10^6 做个篮子啊 重构思路... 恩..Hash + 莫队... 恶心啊.. 找xxy d ...

  9. 【POJ1426】Find The Multiple

    本题传送门 本题知识点:深度优先搜索 | 宽度优先搜索 题意很简单,让我们找一个只有1和0组成的十位数是n的倍数的数. 这题一开始吓到我了--因为Output里说输出的长度最长不超过100位???那是 ...

  10. Dynamic_Rankings(动态区间第k大)

    ZOJ - 2112 \[ \ \] (那些说这道题是树状数组套主席树的人一定对主席树有误解!) 这里我们用树状数组套线段树来解决来写 首先 , 我们需要有n棵线段树(不是\(n^2\)空间,别慌) ...