很多程序员朋友都视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. python基础知识-集合,列表,元组间的相互装换

    在python中列表,元祖,集合间可以进行相互转化, def main(): set1={'hello','good','banana','zoo','Python','hello'} print(l ...

  2. Euclid`s Game

    题目 给定两个整数 a 和 b,Stan和Ollie轮流从较大的数字中减去较小的数的倍数.这里的倍数是指1倍.2倍这样的整数倍,并且相减后的结果不能小于0.Stan先手,在自己的回合将其中一个数变成零 ...

  3. C#中RadioButton选中和取消选中(一种没办法选中和未选中切换)

    今天在做Winform 中RadioButton控件时,遇到一个小坑,虽然很简单,但是浪费我十分钟,感觉需要记录一下共勉. 问题描述:(RadioButton控件名为rbTime) 本来以为判断一下是 ...

  4. final和static语句

    final关键字 final的概念 关键字final,final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法. final的特点 当final ...

  5. 大文件上传组件webupload插件

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  6. 机器学习之决策树原理和sklearn实践

    1. 场景描述 时间:早上八点,地点:婚介所 '闺女,我有给你找了个合适的对象,今天要不要见一面?' '多大?' '26岁' '长的帅吗?' '还可以,不算太帅' '工资高吗?' '略高于平均水平' ...

  7. orm-1

    - ORM什么是? 类名 ---> 数据库表 对象 ---> 记录 对象.属性 ---> 字段 - ORM的优缺点: 优点: 可跨平台,可以通过对象.属性取值,对象.方法,让该方法内 ...

  8. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

  9. leetcode 337. 打家劫舍iii

    题目描述: 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为“根”. 除了“根”之外,每栋房子有且只有一个“父“房子与之相连.一番侦察之后,聪明 ...

  10. 自己动手实现DNS协议

    1. 主要内容 不说废话,直接进入正题.先说说本文本文的主要内容,好让你决定是否看下去: 介绍DNS是干什么的: 介绍DNS是如何工作的: 介绍DNS请求与响应的消息格式: 编程实现一个简单的DNS服 ...