很多程序员朋友都视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. 20180414模拟赛T2——拼图

    拼图 源程序名 puzzling.??? (PAS,BAS,C,CPP) 可执行文件名 puzzling.EXE 输入文件名 puzzling.IN 输出文件名 puzzling.OUT 时间限制 1 ...

  2. Performance --- 前端性能监控

    阅读目录 一:什么是Performance? 二:使用 performance.timing 来计算值 三:前端性能如何优化? 四:Performance中方法 五:使用performane编写小工具 ...

  3. IDEA创建Mybatis的配置文件---sqlMapConfig.xml

    Mybatis的配置文件不像Spring的配置文件,在Maven当中添加过依赖之后就可以在下面这个地方打开,需要自己去手动去编写配置文件,但是自己编写的话会记不住要引入的DTD,所以就需要自己创建一个 ...

  4. 网络命令——last、lastlog、traceroute、netstat

    1.last命令(查看目前和过去用户的登录信息) 2.lastlog命令(检查某用户上次登录的时间): 3.traceroute命令: 显示数据包到主机间的路径. 4.netstat命令: 查看本机已 ...

  5. CF241E Flights 题解

    题目 做了一下这道题,突然发现自己忘了差分约束,赶紧复习一下. 设当前有n个变量 a1,a2,...,an ,有若干组限制形如 ai≤aj+k (其中k为常数),则由点j向点i连一条边权为k的边,再从 ...

  6. Technocup 2020 Elimination Round 3题解

    传送门 \(A\) 曲明连sb模拟不会做,拖出去埋了算了 //quming #include<bits/stdc++.h> #define R register #define fi fi ...

  7. OpenVSwitch实验参考

    1. 使用Floodlight管理OVS桥 (1) 下载:https://codeload.github.com/floodlight/floodlight/tar.gz/v1.2 (2) tar x ...

  8. Missing Data Reconstruction in Remote Sensing Image With a Unified Spatial–Temporal–Spectral Deep Convolutional Neural Network(缺失数据补全,时空谱网络)

    摘要 文章针对修复坏波段(AQUA B6),恢复条带损失,恢复云污染提出了一个深度学习网络结构,他说 To date, to the best of our knowledge, no studies ...

  9. 【XR-4】题

    题面 题解 由题,所求为方程\(y^2 = x^2 + ax + b\)的整数解数量. 两边同乘\(4\),可得\((2y)^2 = 4x^2 + 4ax + 4b\). 配方后得\((2y)^2 = ...

  10. UDF——定制窗口

    获取实例句柄的代码来自:https://blog.csdn.net/xie1xiao1jun/article/details/22180815 在Fluent当中我们可以使用scheme来为Fluen ...