SQL Server存储过程学习(通俗易懂)
存储过程简介
存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
在数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。
创建存储过程的基本代码结构:
CREATE PROCEDURE Procedure_Name --Procedure_Name为存储过程名(不能以阿拉伯数字开头),在一个数据库中触发器名是唯一的。名字的长度不能超过个字。PROCEDURE可以简写为PROC。@Param1 Datatype,@Param2 Datatype --@Param1和@Param2为存储过程的参数,Datatype为参数类型,多个参数用逗号隔开,最多允许个参数。AS --存储过程要执行的操作 BEGIN--BEGIN跟END组成一个代码块,可以写也可以不写,如果存储过程中执行的SQL语句比较复杂,用BEGIN和END会让代码更加整齐,更容易理解。END
GO --GO就代表结操作完毕 exec Procedure_Name [参数名] --调用存储过程Procedure_Name。drop procedure Procedure_Name --删除存储过程Procedure_Name,不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程show procedure status --显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等show create procedure Procedure_Name --显示存储过程Procedure_Name的详细信息exec sp_helptext Procedure_Name --显示你这个Procedure_Name这个对象创建文本
存储过程Study
–删除表
drop table student
go
–创建用户信息数据表
create table student
(
id int identity(1,1),–递增1,
stuNo varchar(50) primary key, --唯一键
stuName varchar(50),
stuAge datetime,
stuSex varchar(5)
)–创建用户分数数据表
create table course
(
id int identity(1,1),–递增1,
stuNo varchar(50),
courseName varchar(50),
courseScore decimal
)
–插入数据
–插入单条数据
insert into student(stuNo,stuName,stuAge,stuSex) values(‘01’,‘王男’,‘1996-08-27 09:00:00.000’,‘男’)–多数量插入数据
–SQL Server2008特有的插入
insert into student values(‘02’,‘杨幂’,‘1995-4-20 6:0:0’,‘女’),
(‘03’,‘程峰’,‘1988-9-17 15:30:0’,‘男’)insert into course values(‘02’,‘思想政治’,‘85.5’),
(‘02’,‘数学’,‘70’),
(‘02’,‘语文’,‘80’),
(‘02’,‘物理’,‘90’),
(‘02’,‘化学’,‘65’),
(‘02’,‘英语’,‘96’)insert into course values(‘03’,‘思想政治’,‘60’),
(‘03’,‘数学’,‘65’),
(‘03’,‘语文’,‘84’),
(‘03’,‘物理’,‘70’),
(‘03’,‘化学’,‘76’),
(‘03’,‘英语’,‘54’)–使用UNION ALL来进行插入
insert into student
select ‘04’,‘wangan’,‘1895-5-27 14:30:28’,‘女’
union all
select ‘05’,‘zhangnan’,‘1990-1-20 19:0:0’,‘女’
go
–修改数据
update student set stuSex=‘男’,stuAge=‘2016-5-9 8:0:0’ where stuName=‘王男’
go
–删除数据
delete from student where stuNo=01
go
–存储过程查询所有数据
–begin…end 类似编程语言中的{}
create proc stu1
as
begin
select * from student;
end
goexec stu1
go
–存储过程根据条件用户名查询用户信息
create proc stu2
@sname varchar(50) --声明全局变量
as
begin
select * from student s where s.stuName=@sname;
end
goexec stu2 ‘王男’
go
–存储过程内部设定用户名查询用户信息
create proc stu3
@sname varchar(50)=‘王男’
as
begin
select * from student s where s.stuName=@sname;
end
goexec stu3
go
–存储过程根据用户名查询是否存在这个用户信息
create proc stu4
@sname varchar(50),
@result varchar(8) output --输出参数
as
begin
if (select COUNT(1) from student s where s.stuName=@sname)>0
–if exists (select COUNT(1) from student s where s.stuName=@sname)
set
@result=‘存在!’
else
set
@result=‘不存在!’
end
godeclare @result varchar(8)
exec stu4 ‘王男1’,@result output
print @result
go
–存储过程内部设定局部变量用户名来查询用户信息
create proc stu5
as
declare @sname varchar(50) --局部变量声明
set @sname=‘杨幂’
begin
select * from student s where s.stuName=@sname
end
goexec stu5
go
–存储过程根据条件用户学号查询用户名
create proc stu6
@stuNo varchar(50)
as
declare @sname varchar(50)
set @sname=(select s.stuName from student s where s.stuNo=@stuNo)
select @sname
goexec stu6 ‘01’
go
–存储过程插入用户信息
create proc stu7
@stuNo varchar(50),
@stuName varchar(50),
@stuAge datetime,
@stuSex varchar(5)
as
begin
insert into student
(stuNo,stuName,stuAge,stuSex)
values
(@stuNo,@stuName,@stuAge,@stuSex)
end
goexec stu7 ‘07’,‘王莽’,‘2000-9-9 9:9:9’,‘女’
go
–存储过程根据用户名来删除对应的用户信息
–@@rowcount返回操作条数
–return返回信息,终止下面的操作
create proc stu8
@stuName varchar(50)
as
begin
delete from student where stuName=@stuName
return @@rowcount
end
godeclare @result varchar(50)
exec @result=stu8 ‘王莽’
select @result as ‘删除条数’
–print @result
go
–存储过程根据用户学号来查询他的平均分
create proc stu9
@stuNo varchar(50),
@avg int output
as
begin
set @avg=(select AVG(courseScore) from course where stuNo=@stuNo)
–等同
–select @avg=AVG(courseScore) from course where stuNo=@stuNo
end
godeclare @avg int
exec stu9 ‘02’,@avg output
print @avg
go
–存储过程根据用户学号来联合查询用户信息和课程信息
create proc stu10
@stuNo varchar(50)
as
select c.stuNo,s.stuName,s.stuAge,s.stuSex,c.courseName,c.courseScore from student s join course c on s.stuNo=c.stuNo where s.stuNo=@stuNo
goexec stu10 ‘02’
go
–存储过程判断学号是否存在,不存在,插入用户信息,返回消息;存在,返回信息
create proc stu11
@stuNo varchar(50),
@stuName varchar(50),
@stuAge datetime,
@stuSex varchar(5),
@result varchar(50) output
as
if exists (select * from student where stuNo=@stuNo)
begin
set @result=‘对不起,学号已存在!’
end
else
begin
insert into student
(stuNo,stuName,stuAge,stuSex)
values
(@stuNo,@stuName,@stuAge,@stuSex)
set @result=‘恭喜你,用户信息插入成功!’
end
godeclare @result varchar(50)
exec stu11 ‘06’,‘王忠磊’,‘1980-8-8 8:9:0’,‘男’,@result output
print @result
–存储过程查询当前用户的平均成绩与总的平均成绩之间的关系
create proc stu12
@stuNo varchar(50)
as
declare @curAvg decimal(18,2)
declare @totalAvg decimal(18,2)
if exists(select * from course where stuNo=@stuNo)
begin
set @totalAvg=(select AVG(courseScore) from course)
select @curAvg=AVG(courseScore) from course where stuNo=@stuNo
print (‘总的平均分:’+convert(varchar(18),@totalAvg))
print (‘该生的平均分:’+convert(varchar(18),@curAvg))
if @curAvg>@totalAvg
print ‘高于平均水平!’
else
print ‘低于平均水平!’
end
else
print ‘该生对应的分数信息不存在,请重新查询!’
goexec stu12 ‘03’
go
原文链接:https://blog.csdn.net/lxysoid/article/details/86522469
其他资料:
SQL-Server数据库存储过程学习
SQLSERVER存储过程基本语法
SQL Server存储过程学习(通俗易懂)相关推荐
- SQL SERVER 存储过程学习笔记 (转)
将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令. 存储过程的优点 1. ...
- 【转】SQL SERVER 存储过程学习笔记
原文地址:http://www.cnblogs.com/nina-piaoye/archive/2006/09/18/507183.html 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的 ...
- SQL Server 初步学习存储过程总结
一:存储过程概述 SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是S ...
- db2 删除存储过程_数据库教程-SQL Server存储过程使用及异常处理
SQL Server存储过程 存储过程(Procedure)是数据库重要对象之一,也是数据库学习的重点之一.本文,我们以SQL Server为例对存储过程的概念.定义.调用.删除及存储过程调用异常等通 ...
- SQL Server存储过程初学者
In this article, we will learn how to create stored procedures in SQL Server with different examples ...
- SQL Server数据库学习总结及T-SQL语法使用实战
SQL Server数据库及T-SQL实战 声明 名词解释 SQL Server数据库 安装sql server 数据库中的三种完整性 SQL Server数据库基本操作 创建数据库 指定多个数据库文 ...
- SQL Server存储过程输入参数使用表值
在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...
- SQL SERVER深入学习学习资料参考
SQL SERVER深入学习学习资料参考 1.微软Webcast<sql server 2000完结篇>. 尽管微软Webcast出了很多关于Sql Server的系列课程,但是最为深入讲 ...
- SQL Server存储过程里全库查找引用的数据库对象(表、存储过程等)
SQL Server存储过程全库匹配数据库对象(表.存储过程等) 简介 可以通过自定义存储过程sp_eachdb来遍历每个数据库然后结合sys.objects 关联sys.sql_modules后的d ...
最新文章
- 一步步构建大型网站架构
- 关于 JShell,开发人员需要知道的10件事情
- C# 之 6.0 新特性
- ES6 数值的扩展
- 项目合作| 视频监控解决隧道洗车线的安全问题
- android drawLayout抽屉布局
- 推荐时代的内容理解技术探索.pdf(附下载链接)
- atitit.http get post的原理以及框架实现java php
- mysql 5.7插入很慢_MySQL进阶——主从复制
- 中间件是什么意思?中间件技术简介
- nginx代理服务器
- 四级网络工程师笔记-操作系统(中)
- 东原服务器开机显示bb,启用tls后,服务器出现remote error: tls: bad certificate
- Linux 安装locust
- ARM Cortex-M3
- 韦东山嵌入式第一期学习笔记DAY_1——3_1_linux命令入门演示
- 图书馆管理系统心得体会
- 转载:计算机视觉任务(Computer Vision)整理
- 四川航天职业技术学院计算机网络期末考试,四川航天职业技术学院计算机网络技术专业...
- 计算机序列类型和字典试题,计算机考试试题和资料