创建存储过程

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 [email protected]

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 [email protected]

if @count =0

print ‘请检查输入的学号是否有误!‘

else

begin

declare @yu int

select @yu=COUNT(*) from fenshu where [email protected] and yufen>=60

declare @shu int

select @shu=COUNT(*) from fenshu where [email protected] and shufen>=60

declare @ying int

select @ying=COUNT(*) from fenshu where [email protected] and yingfen>=60

declare @he int

set @[email protected][email protected][email protected]

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 @[email protected]+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 <[email protected]          --while循环     

begin

set @sum [email protected][email protected]

set @[email protected]+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 [email protected]

select @yu=yufen ,@shu=shufen,@ying=yingfen  from fenshu where [email protected]

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 [email protected] [email protected]      --表示code是1 的语数外总和! 

 print @count        --此时返回1.表示个数!

时间: 2024-10-13 20:57:13

创建存储过程的相关文章

skynet 创建存储过程脚本

最近主程更改了数据库的操作方案,由之前的拼写sql脚本转为在mysql端创建好存储过程后,直接调用存储过程. 首先对一个表测试上述过程: 数据库端存储过程:(测试表) CREATE TABLE `randomval` (  `id` int(10) unsigned NOT NULL,  `val` int(10) unsigned NOT NULL,  `step` int(10) unsigned NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB  D

MySql中创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 一.MySQL 创建存储过程 "pr_add" 是个简单的

MySQL创建存储过程

存储过程和函数的区别参考链接: http://www.cnblogs.com/lengbingshy/archive/2010/02/25/1673476.html 创建存储过程: DROP PROCEDURE mypro;CREATE procedure mypro (sid INT,OUT sCount INT)BEGIN SELECT COUNT(*) INTO sCount from student where id = sid;END 执行该存储过程: CALL mypro(1,@c)

[转]MYSQL 创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 一.MySQL 创建存储过程 "pr_add" 是个简单的

SQL Server创建存储过程(转载)

什么是存储过程? q       存储过程(procedure)类似于C语言中的函数 q       用来执行管理任务或应用复杂的业务规则 q       存储过程可以带参数,也可以返回结果 q       存储过程可以包含数据操纵语句.变量.逻辑 控制语句等 存储过程的优点 (1)执行速度快. 存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译. 存储在数据库服务器,性能高. (2)允许模块化设计. 只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次.存储

主库创建存储过程时从库显示 Error 1049

MySQL Bugs: #72682: Replication MBR halts - stored procedure from unreplicated schema MySQL Bugs: #59135: replicate-wild-do-table: cross-database updates and create SPs break replication 如果从库只使用了replicate-wild-do-table,那么当主库创建存储过程时,从库会不同步,报错信息如下: 150

SQL Server创建存储过程

什么是存储过程? q 存储过程(procedure)类似于C语言中的函数 q 用来执行管理任务或应用复杂的业务规则 q 存储过程可以带参数,也可以返回结果 q 存储过程可以包含数据操纵语句.变量.逻辑 控制语句等 存储过程的优点 (1)执行速度快. 存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译. 存储在数据库服务器,性能高. (2)允许模块化设计. 只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次.存储过程可由在数据库编程方面有专长的人员创建,并可独

iBatis调用存储过程以及MySQL创建存储过程

首先是MySQL中创建存储过程的SQL -- 列出所有的存储过程 SHOW PROCEDURE STATUS; -- 查看一个已存在的存储过程的创建语句,如果此存储过程不存在,会提示SQL错误(1305):PROCEDURE pro_init does not exist SHOW CREATE PROCEDURE pro_init; -- 创建存储过程 DROP PROCEDURE IF EXISTS pro_init; -- 删除一个已存在的存储过程 DELIMITER // -- 声明当前

创建存储过程示例

CREATE OR REPLACE PROCEDURE P_XT_TEST_ZWL IS   TESTVALUE VARCHAR2(500);   LS_ERR    VARCHAR2(500); --错误日志 BEGIN SELECT H.SQLXH INTO TESTVALUE FROM CX_CXDY H WHERE ROWNUM < 3;  COMMIT; EXCEPTION   WHEN OTHERS THEN LS_ERR := '错误:' || SQLCODE || ': ' ||

创建存储过程及理解

上面的是创建存储过程的语法,下面的是将其中动态参数换成了实际的参数的一个简单的例子.好好理解上面的模板,你就再也不用担心存储过程的语法不会了.