首页 > 代码库 > 创建存储过程
创建存储过程
Use new
go
select *from xuesheng
select *from fenshu
select *from jiaoshi
==============================================
--查‘赵文‘教的语文成绩>80 的学生信息,如果人数超过个,考核达标
----正确的写法
declare @count int
select @count=count(*) from fenshu where code in (
select code from xuesheng where yuhao =(select code from jiaoshi where name=‘赵文‘)
) and yufen >=80
print @count
if @count>3
print ‘达标‘
else
print ‘不达标‘
==================================================
create proc firstproc
as
select *from fenshu
go --好比C#中创建的函数,要引用才起作用!
--在数据库的存储过程文件夹里,找到保存的存储过程,右键单击打开‘执行存储过程‘就会完成执行.
--并返回值,0代表完成!
declare @fanhuizhi int
execute @fanhuizhi=firstproc --查询
--或者exec firstproc 也可以执行firstproc 存储过程。
--print @fanhuizhi --在结果中打印出表格,在消息中显示.
select @fanhuizhi --在结果中显示两个表,一个表示查询的表,另一个是返回值!
-----------------------修改存储过程-----------------------
alter proc firstproc
as
select fenshu.code ,yufen,name from fenshu,xuesheng
where fenshu.code =xuesheng.code
go
exec firstproc
----------------------查询多个表-------------------------
create proc secondproc
as
begin
select *from xuesheng
select *from fenshu
end
go
execute secondproc
-----------------------含参数的存储过程-----------------------------
create proc thirdproc
@name varchar(20)
as
begin
declare @jiaoshicode int, @kecheng varchar(20)
select @jiaoshicode ,@kecheng from jiaoshi where name =@name
if @kecheng =‘语文‘
begin
select @count=count(*) from fenshu where code in (
select code from xuesheng where yuhao =(select code from jiaoshi where name=‘赵文‘)
end
if @kecheng=‘数学‘
begin
select @count=count(*) from fenshu where code in (
select code from xuesheng where shuhao =(select code from jiaoshi where name=‘李数‘)
end
if @kecheng =‘英语‘
begin
select @count=count(*) from fenshu where code in (
select code from xuesheng where yinghao =(select code from jiaoshi where name=‘张外‘)
end
end
go
exec thirdproc ‘李数‘-- ‘李数‘(教师表中的name)是执行存储过程的变量值!
------------------------------------------------------
create proc fouthproc
@hello varchar(20)
as
begin
print @hello
end
go
exec fouthproc ‘今天是个好天气‘—表示变量@hello被赋值‘今天是个好天气’--注意书写流程!
----------------输入学号,判断学生结业--------------------------------------
create proc biye
@xuehao int----------创建变量. 就是需要输入值去赋值的变量
as
begin
declare @count int
select @count=COUNT(*) from xuesheng where code=@xuehao
if @count =0
print ‘请检查输入的学号是否有误!‘
else
begin
declare @yu int
select @yu=COUNT(*) from fenshu where code=@xuehao and yufen>=60
declare @shu int
select @shu=COUNT(*) from fenshu where code=@xuehao and shufen>=60
declare @ying int
select @ying=COUNT(*) from fenshu where code=@xuehao and yingfen>=60
declare @he int
set @he=@yu+@shu+@ying
if @he=3
print ‘优秀!已经结业!‘
if @he=2
print ‘已经结业!‘
if @he=1
print ‘不能结业!请重修两门课程‘
if @he=0
print ‘请重修所有课程!‘
end
end
go
exec biye 1 --输入code值是 1,表示查询存储过程biye
drop proc biye --删除创建的存储过程biye
------------------使用return接收---------------------------------------
create proc jieshou
@hao int----------创建变量. 就是需要输入值去赋值的变量
as
begin
set @hao=@hao+10 --赋值!
return @hao
end
go --存储过程完成,return接收,但是没有打印
declare @abc int --打印结果要创建新变量,打印!
exec @abc=jieshou 3 --写 存储过程 名字!
print @abc --当变量@hao=3时,存储过程jieshou, return的结果 13
-------------------使用return 累加求和-------------------------
create proc leijia
@n int
as
begin
declare @sum int=0 ,@a int =0 --创建,并且赋值为
while @a <=@n --while循环
begin
set @sum =@sum+@a
set @a=@a+1 --赋值时一定要 set
end
return @sum
end
go
declare @haha int
exec @haha=leijia 5
print @haha --输出5的累加 15
--------输出多变量情况 (return、output 接收方法)-----------
craete proc sixproc --做修改后,要变成alter proc sixproc
@code int ,
@yu decimal(18,2) output,
@shu decimal(18,2) output,
@ying decimal(18,2) output
as
begin
declare @count int
select @count=COUNT (*) from fenshu where code=@code
select @yu=yufen ,@shu=shufen,@ying=yingfen from fenshu where code=@code
return @count --运行到return语句,就结束语句执行。所以一般在最后或循环里面
end
go
declare @yu decimal(18,2),@shu decimal(18,2),@ying decimal(18,2),@count int
--创建对应的 接收 变量
exec @count=sixproc 1 (表示查询的方式),@yu output ,@shu output,@ying output
--(output的接收方法)
print @yu +@shu +@ying --表示code是1 的语数外总和!
print @count --此时返回1.表示个数!
创建存储过程