14、SQL基础整理(存储过程)
存储过程procedure(proc)
数据库—可编程性—存储过程
新建存储过程:
create proc firstproc
as
select *from fenshu
go
执行存储过程:
存储过程—右键—执行存储过程
declare @fanhuizhi int
exec @fanhuizhi = firstproc
select 'Return Value' = @fanhuizhi
return value执行成功/失败的返回值(0为成功)
execute/exec firstproc
修改存储过程
alter proc firstproc
as
select yuwen,shuxue,yingyu,name from student,fenshu where student.code = fenshu.code
go
execute firstproc
查询多个表
create proc secondproc
as
begin
select*from student
select*from teacher
select*from fenshu
end
带子查询的查询过程
create proc threeproc
as
begin
declare @count int
select @count=count(*) from (select *from student where code = any(select code from fenshu where code in
(select code from student where MT = ( select code from teacher where name = '数一'))and shuxue>80)
)as new
if @count> 3
print'达标'
else
print'不达标'
end
exec threeproc
带参数的查询过程
create proc fourthproc
@hello varchar(20),
@ercan varchar(20)—参数部分
as
begin
print @hello+@ercan
end
go
exec fourthproc 'helloworld',',你好世界!'
复杂参数
create proc fifthproc
@name varchar(20)
as
begin
declare @countjs int,@lesson varchar(20)
select @countjs = COUNT(*)from teacher where name = @name
if @countjs = 0
begin
print '没找到这个老师'
end
else
begin
select @lesson = course from teacher where name = @name
declare @count int
if @lesson = '语文'
begin
select @count= count(*)from student where code = any(select code from fenshu where code in
(select code from student where CT = ( select code from teacher where name = @name))and yuwen>80)
end
else
if @lesson = '数学'
begin
select @count= count(*)from student where code = any(select code from fenshu where code in
(select code from student where MT = ( select code from teacher where name = @name))and shuxue>80)
end
else
if @lesson = '英语'
begin
select @count= count(*)from student where code = any(select code from fenshu where code in
(select code from student where ET = ( select code from teacher where name = @name))and yingyu>80)
end
if @count>=3
print '达标'
else
print '不达标'
end
end
go
exec fifthproc (@name=可忽略)'数一'
exec fifthproc '数'
删除存储过程
drop proc 存储过程名
练习
------------输入学生的学号,看是否结业(三门课都超过分发优秀证书,有两门课或以上不及格不结业,有一门课不及格结业)------------
alter proc jieye
@xuehao int
as
begin
declare @shuxue int
declare @yuwen int
declare @yingyu int
declare @zongfen int
select @shuxue = count(*) from fenshu where code=@xuehao and shuxue>80
select @yuwen = count(*) from fenshu where code=@xuehao and yuwen>80
select @yingyu = count(*) from fenshu where code=@xuehao and yingyu>80
set @zongfen = @shuxue+@yuwen+@yingyu
if @zongfen = 3
print '优秀'
if @zongfen = 2
print '结业'
if @zongfen < 2
print '不结业'
end
go
返回值
-----------输入一个数,使其+10返回------定义变量接收执行存储过程返回的值
create proc jisuan
@sum int(可以设默认值@sum int=10)
as
begin
set @sum = @sum +10
return @sum
end
declare @shu int
exec @shu = jisuan 2(把2改为default即可按照默认值的输出结果打印)
print @shu
---------返回总分的个数并打印出来-----------
create proc jieye2
@xuehao int
as
begin
declare @shuxue int
declare @yuwen int
declare @yingyu int
declare @zongfen int
select @shuxue = count(*) from fenshu where code=@xuehao and shuxue>80
select @yuwen = count(*) from fenshu where code=@xuehao and yuwen>80
select @yingyu = count(*) from fenshu where code=@xuehao and yingyu>80
set @zongfen = @shuxue+@yuwen+@yingyu
return @zongfen
end
declare @count int
exec @count = jieye2 1
print @count
return后面的存储过程将不再运行(放在if等句子里的例外)
练习
--输入一个数n,求n+n-1+……+1的和---
alter proc qiuhe
@n int
as
begin
declare @sum int =0
while @n>=1
begin
set @sum = @n+@sum
set @n = @n-1
end
return @sum
end
go
declare @n1 int
exec @n1 = qiuhe 5
print @n1
--------带返回值,返回参数,输入参数的存储过程--------
---输入学号,返回三门课的成绩
create proc sixproc
@yuwen decimal(18,2) output,
@shuxue decimal(18,2) output,
@yingyu decimal(18,2) output,
@code int
as
begin
declare @count int
select @yuwen = yuwen,@shuxue = shuxue,@yingyu = yingyu from fenshu where code = @code
end
go
---定义变量接受存储过程带出来的输出参数的值
declare @yuwen decimal(18,2),@yingyu decimal(18,2),@shuxue decimal(18,2)
exec sixproc @yuwen output,@shuxue output, @yingyu output,1
print @yuwen+@yingyu+@shuxue
----------------------------------------------
alter proc sixproc
@yuwen decimal(18,2) output,
@shuxue decimal(18,2) output,
@yingyu decimal(18,2) output,
@code int
as
begin
declare @count int
select @count = COUNT(*)from student where code = @code
select @yuwen = yuwen,@shuxue = shuxue,@yingyu = yingyu from fenshu where code = @code
return @count
end
go
declare @yuwen decimal(18,2),@yingyu decimal(18,2),@shuxue decimal(18,2),@count int
exec @count = sixproc @yuwen output,@shuxue output, @yingyu output,15
print @yuwen+@yingyu+@shuxue
print @count
14、SQL基础整理(存储过程)的更多相关文章
- 必杀技———SQL基础整理系列(一)
SQL(Structured Query Language)——结构化查询语言 SQL语言的组成部分 数据定义语言 (DDL:Data Definition Language) 负责数据结构定义与数据 ...
- 16、SQL基础整理(触发器.方便备份)
触发器(方便备份) 本质上还是一个存储过程,只不过不是通过exec来调用执行,而是通过增删改数据库的操作来执行(可以操作视图) 全部禁用触发器 alter table teacher disable ...
- 11、SQL基础整理(变量)
变量 定义变量:declare @hello varchar(20) 赋值:set @hello = ‘你好’ select(结果框显示)/print(消息框显示) @hello *三行必须同时 ...
- 8、SQL基础整理(约束)
约束 主键约束 防止在新增数据时出错,有约束性,起唯一标志的作用,在新增条目的时候防止不慎添加重复内容(不允许有null值) 1. 右键—设计—设置主键 2.在创建表格时设置 code int pr ...
- 5、SQL基础整理(字符串函数)
字符串函数 ASCII 返回字符串首字母的ascii编码 select ASCII('name') select ASCII(name) from xuesheng select *from xues ...
- SQL基础分页存储过程(案例一)
--分页 存储过程 案例 -- 所执行的存储过程 create proc pageForUsers @currPage int, --当前页数 @pageSize int, --每页多少条记录 @co ...
- 17、SQL基础整理(事务)
事务 事务==流程控制 确保流程只能成功或者失败,若出现错误会自动回到原点 例: begin tran insert into student values('111','王五','男','1999- ...
- 15、SQL基础整理(视图)
视图 即虚拟表 系统-右键-新建视图 编辑前200行 select *from studentscore 代码创建法: create view studentscore as select stude ...
- 13、SQL基础整理(流程控制begin……end)
流程控制 begin ……end将一个语句块包含起来,中间可以写任何语句 格式: begin--开始 select *from student end--结束 if declare @bianlian ...
随机推荐
- ajax接触
1. function doSave() { ajax_get("${contextPath}/auth/functionsave", $("#editForm" ...
- iOS开发之内购-AppStore
本文会给大家详细介绍iOS内购,虽然之前网上也有内购的教程,但是还不够详细,我重新整理出一份教程,希望对大家有所帮助. 基于Xcode7.1.1版本,模拟器iphone6,9.1系统.部分地方直接摘自 ...
- Java 集合系列 17 TreeSet
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- javascript中IE与ff的区别
1.自定义属性问题:可以使用获取常规属性的方法来获取自定义属性,也可以使用getAtribute()获取自定义属性,ff下只能使用getAttribute()获取自定义属性. 2. 在IE中可以用ev ...
- 最原始的COM组件调用过程(不使用注册表信息)
最原始的COM组件调用过程(不使用注册表信息) 最近因为项目的关系开始研究COM组件了,以前都认为COM过时了,所以也没怎么接触. 现在好好补补课了. 一般调用COM都是通过注册表找到它的位置, 然后 ...
- 关于http断点续传相关的RANGE这个header
<?php //1.txt内容"1234567890" socketData('127.0.0.1','/1.txt',80,"RANGE:bytes=0-0\r\ ...
- JDBC 1
Java 中的数据存储技术 在Java中,数据库存取技术可分为如下几类: JDBC直接访问数据库 JDO技术 第三方O/R工具,如Hibernate, ibatis 等 JDBC是java访问数据库的 ...
- C++封装、继承、多态
C++封装继承多态总结 面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重 ...
- RPI学习--环境搭建_更新firmware
(用以解决USB摄像头不识别的状况) rpi-update是老外开发的一个更新树莓派firmware的工具 $ sudo apt-get update $ sudo apt-get install ...
- C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)
强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...