sql 存储过程学习
1、存储过程
存储过程可以包含数据操纵语句、变量、逻辑 控制语句等,比如:单个select语句, select语句块,select语句与逻辑控制块。
存储过程优点:
执行速度更快
允许模块化程序设计
提高系统安全性
减少网络流通量
由系统定义,存放在master数据库中
类似C语言中的系统函数
系统存储过程的名称都以“sp_”开头或”xp_”开头
用户自定义存储过程
语法:
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
…… ,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
GO
例子:请创建存储过程,查看本次考试平均分以及未通过考试的学员名单
create database test
use test
create table stuInfo
(
stuNo int identity(1,1) primary key ,
stuName varchar(1000) not null ,
stuAge int check(stuAge>=0 and stuAge<=130) not null,
stuSex char(2) default('男') not null,
stuAddress text not null
)
insert into stuInfo(stuName,stuAge,stuAddress) values('张三',20,'湖南省')
select * from stuInfo
create table stuMarks
(
stuMID int identity(1,1) primary key,
stuNo int not null references stuInfo(stuNo),
stuMMakes float not null,
stuMLungunger float not null
)
insert into stuMarks values(1,99,90),
(2,88,88),
(3,77,77),
(4,60,60),
(5,55,55),
(6,69,60)
create proc stu_procstu--创建存储过程
AS
DECLARE @writtenAvg float,@labAvg float
SELECT @writtenAvg=AVG(stuMMakes),@labAvg=AVG(stuMLungunger)
FROM stuMarks
print '笔试平均分:'+convert(varchar(10),@writtenAvg)
print '机试平均分:'+convert(varchar(10),@labAvg)
IF (@writtenAvg>70 AND @labAvg>70)
print '本班考试成绩:优秀'
ELSE
print '本班考试成绩:较差'
print '--------------------------------------------------'
print ' 参加本次考试没有通过的学员:'
SELECT stuName,stuInfo.stuNo,stuMMakes,stuMLungunger
FROM stuInfo INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
WHERE stuMMakes<60 OR stuMLungunger<60
exec stu_procstu--调用执行存储过程
drop proc stu_procstu--删除存储过程
存储过程的参数分为两种:输入参数和输出参数
输入参数:
--根据输入的参数查找本次考试没有通过的学员
CREATE PROCEDURE proc_stu_para
@writtenPass int,
@labPass int
AS
print '--------------------------------------------------'
print ' 参加本次考试没有通过的学员:'
SELECT stuName,stuInfo.stuNo,stuMMakes,stuMLungunger
FROM stuInfo
INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
WHERE stuMMakes<@writtenPass OR stuMLungunger<@labPass
GO
exec proc_stu_para 60,80
输出参数
--查看本次及格分数线的一下的学员人数,检验分数线是否需要调整
CREATE PROCEDURE proc_stu_out
@notpassSum int OUTPUT,
@writtenPass int=60,
@labPass int=60
AS
SELECT stuName,stuInfo.stuNo,stuMMakes, stuMLungunger
FROM stuInfo
INNER JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo
WHERE stuMMakes<@writtenPass OR stuMLungunger<@labPass
SELECT @notpassSum=COUNT(stuNo) --改参数接受未满足条件的数量用于调用输出@notpassSum
FROM stuMarks WHERE stuMMakes<@writtenPass OR stuMLungunger<@labPass
GO
DECLARE @sum int --调用存储过程,输入参数,检验输出值
EXEC proc_stu_out @sum OUTPUT ,64
print '--------------------------------------------------'
IF @sum>=3
print '未通过人数:'+convert(varchar(5),@sum)+ '人, 超过60%,及格分数线还应下调'
ELSE
print '未通过人数:'+convert(varchar(5),@sum)+ '人,已控制在60%以下,及格分数线适中'
GO
注意接收存储过程返回值时必须加output关键字
sql 存储过程学习的更多相关文章
- SQL数据库问题 解释一下下面的代码 sql 存储过程学习
SQL数据库问题 解释一下下面的代码 2008-08-13 11:30wssqyl2000 | 分类:数据库DB | 浏览1154次 use mastergocreate proc killspid( ...
- [BILL WEI]SQL 存储过程学习
--查看数据库exec sp_databases ;--查看表exec sp_tables ;--查看列exec sp_columns WMS_ASN;--查看索引exec sp_helpindex ...
- SQL存储过程概念剖析
一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...
- SQL server存储过程学习
由于之前使用 Linq to Sql来操作数据库,对于数据库的存储过程.函数等比较薄弱.乘着自己闲着的时候,就百度自学了一点存储过程,以防以后要用. 基础通俗易懂的存储过程通过 存储过程学习 ,然后自 ...
- SQL server学习(三)T-SQL编程、逻辑控制语句和安全模式
T-SQL编程 T-SQL编程与C语言类似,只是语法稍有不同而已,总体思想还是没有变化的.多的就不说了,还是从变量开始. 变量也分为全局变量和局部变量,表示方式稍有不同. 局部变量: 局部变量必须以标 ...
- SQL Server 学习系列之五
SQL Server 学习系列之五 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) SQL Server 学习系列之三(SQL 关键字) SQ ...
- SQL Sever 学习系列之一
SQL Sever 学习系列之一 本学习系列,从实际工作需要中积累,对于一个新手而言,写出几条漂亮的查询语句,应该是可以受启发的. 一.问题的需求是:员工薪酬发放,现有资金能发放多少人,哪些人应得? ...
- SQL 语句学习
Sql语句学习 一. select playerId, count(playerId) as num from OperateLog_$i where playerId > 0 and roo ...
- SQL server学习
慕课网sql server学习 数据库第一印象:desktop--web server--database server** 几大数据库:sql server.oracle database.DB2. ...
随机推荐
- 【IIS】解决IIS无响应假死状态,asp突然无法访问重启后可以使用是什么原因
在IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢. 可以做以下配置:1.在IIS中对每个网站进行单独的应用程序池配置.即互相之间不影响.2.设置应用程序池的回收时间,默 ...
- June 29th. 2018, Week 26th. Friday
Real love is always worth waiting for. 真爱永远值得等待. From Westworld. Real love is rare, but it does exis ...
- linux中使用docker-compose部署软件配置分享
本篇将分享一些 docker-compose 的配置,可参考其总结自己的一套基于docker的开发/生产环境配置. 安装docker及docker-compose install docker cur ...
- java8 日期时间之间的关系
Class or Enum Year Month Day Hours Minutes Seconds* Zone Offset Zone ID toString Output Where Discu ...
- 关于Bulk加载模式
Bulk加载模式是Informatica提供的一种高性能数据加载模式,它利用数据库底层机制,依靠调用数据库本身提供的Utility来进行数据的加载 该方式将绕过数据库的log记录,以此提高数据库加载性 ...
- ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...
- 美团分布式服务通信框架及服务治理系统OCTO
一.什么是OCTO 定义: OCTO是美团的分布式服务通信框架及服务治理系统,属于公司级基础设施,目前尚未开源. 目标: 为公司所有业务提供统一的服务通信框架,使业务具备良好的服务运营能力,轻松实现 ...
- Ubuntu:命令行下浏览网页
前述 兴起,试一下不用图形化界面浏览 安装w3m 直接进入root账号 apt-get install w3m 检验是否成功 w3m www.baidu.com 就这样成功的进入baidu了,纯文本模 ...
- 阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 父子类变量名相同会咋样? 为啥强制子类.父类变量名不同? ...
- PyCharm:选择性忽略 PEP8 警告
PyCharm 是个很强大的 python IDE,PEP 8 的告警提示也很好用,但是函数名不能包含大写字母等少数几个规范真心觉得不好,作为一名处女座强迫症患者,代码下面的波浪线这种东西是绝对不允许 ...