很多程序员朋友都视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. 通过jar包名称,获取maven的依赖信息GAV

    烦恼:当我们手上有一堆三方件jar包,想要转成maven管理时,需要一个一个配置进pom文件中,而且GAV信息还得去收集. 为了快速生成如下信息,我们可以这样.... GAV:groupId + ar ...

  2. Virtual DOM--react

    Consider a DOM made of thousands of divs. Remember, we are modern web developers, our app is very SP ...

  3. cpu绘图的本质:生成图片的二进制(数字)信息

    计算机中图片是用二进制数据表达的.

  4. Oracle执行过程中出现的问题

    ORA-02292: 违反完整约束条件 (用户名.约束名) - 已找到子记录 造成原因:删除该表时,有依赖该表的子表数据,需要删除该条记录或者禁用约束. 查看约束所在的表:select * from ...

  5. 注解 @EnableFeignClients 工作原理

    概述在Spring cloud应用中,当我们要使用feign客户端时,一般要做以下三件事情 : 使用注解@EnableFeignClients启用feign客户端:示例 : @SpringBootAp ...

  6. [RN] React Native :Error: Cannot find module 'asap/raw'

    今天在使用 react-native-dropdownmenus 的时候,安装没问题,但Link的时候 报: Error: Cannot find module 'asap/raw' 朋友们莫慌,一步 ...

  7. select函数及fd_set介绍

    1. select函数 1. 用途 在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在 ...

  8. SQL进阶-去重

    一.去重的2种基本方法 1.DISTINCT ## 建表: CREATE TABLE teacher( teacher_id ), teacher_name ), id_no ) ); CREATE ...

  9. FPGA综合的约束

    近日发现,有些逻辑电路的综合时间约束和布局布线约束相差太大时,难以布通.此时,应该选择尽量接近的时钟约束.

  10. 【Beta】Scrum meeting 4

    目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit记录截图 小程序前端仓库 技术博客 写在前面 例会时间:5.8 22:30-23:00 例会地点:微信群语音 ...