[ Fs422.CoM]        热烈庆祝风沙电脑技术网站今天开张,做了一年的垃圾站,决定做一个对自己有帮助的站,或许也能帮到你,谢谢你的光临!!!如果有什么问题,可以点此给我留言------风少 2008.7.31
返回首页
当前位置: 首页 > SQL > SQL案例学习 > 浏览正文

创建及使用存储过程

时间:2009年05月06日来源:网络 作者:hn1688 点击:
用企业管理器创建存储过程stu_proc1,要求能从学生表查询学号为102的学生信息。在企业管理器中,展开数据库teachdb, 右键单击结点“存储过程”,选择“新建存储过程”,弹出图6-2-1。在文本框中输入存储过程的内容后如图6-2-2,单击“检查 语法”正确后,单击“确定”即可创建名为stu_proc1的存储过程。
 一、用企业管理器创建存储过程

    用企业管理器创建存储过程stu_proc1,要求能从学生表查询学号为102的学生信息。在企业管理器中,展开数据库teachdb,

右键单击结点“存储过程”,选择“新建存储过程”,弹出图6-2-1。在文本框中输入存储过程的内容后如图6-2-2,单击“检查

语法”正确后,单击“确定”即可创建名为stu_proc1的存储过程。

    

                                图6-2-1

    

                                图6-2-2    

  查看stu_proc1存储过程运行的结果,可以通过在查询分析器中运行exec stu_proc1来完成,如图6-2-3。

        

                                             图6-2-3    

查看stu_proc1存储过程的内容,可能通过exec sp_helptext stu_proc1来完成,如图6-2-4。

       

                                             图6-2-4

    二、用查询分析器创建存储过程。

    要查询的学号通过执行语句中的输入参数传递给存储过程stu_proc2。打开查询分析器,输入以下内容执行后结果如图6-2-5:

 use teachdb   
 create proc stu_proc2   
 @sno char(4)/*定义参数及类型*/   
 as   
 select * from student where s_no=@sno

    

                                       图6-2-5

    创建存储过程的语法:

    CREATE? PROC[EDURE] 存储过程名[;下标 ] /*定义过程名*/  
  [{@ 形参? 数据类型 }
/*定义参数及类型*/ 
   [VARYING][= 默认值 ][OUTPUT]] /*定义参数的属性*/    [,...n1]  
  [WITH    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] 
   AS Transact-SQL 语句[...n2 ] /*执行的操作*/

    三、使用不带参数的存储过程。

    创建一个查询teachdb数据库中各位同学各门功课成绩的存储过程stu_grade。并要求加密文本条目,如果该存储过程已经存

在,则先删除后再重新创建。程序清单:

USE teachdb   
IF EXISTS (SELECT name FROM sysobjects WHERE name='stu_grade'and type='P')  
DROP PROCEDURE stu_grade/*IF语句检查是否已存在同名的存储过程。若已存在,则先删除,然后再执行CREATE语句*/  
GO   
CREATE PROCEDURE stu_grade  
WITH ENCRYPTION/*将存储过程的文本进行加密,运行后使用系统存储过程sp_helptext无法看到所定义的存储过程文本*/   
AS     SELECT s_name AS 姓名,c_name AS 课程名,score AS 成绩    
FROM choice,course,student  
WHERE student.s_no=choice.s_no and course.c_no=choice.c_no

    四、使用带有通配符参数的存储过程

    创建存储过程stu_proc3,用于从三个表的连接中返回指定学生的学号、姓名、所选课程名称、学分及该课程的成绩。该存储

过程在参数中使用了模式匹配。程序清单如下:

USE teachdb   
  IF EXISTS (SELECT name FROM sysobjects WHERE name='stu_proc3' AND type='P')   
   DROP PROCEDURE stu_proc3  
   GO  
   CREATE PROCEDURE stu_proc3     @name varchar(30)   
  AS   
  SELECT student.s_no as 学号,student.s_name AS 姓名,course.c_name AS 课程名,course.c_score AS 学分,   
  choice.score AS 成绩 FROM student,course,choice  
  WHERE student.s_name LIKE @name and student.s_no=choice.s_no and course.c_no=choice.c_no   
  GO

    stu_proc3存储过程也可以有多种执行形式,下面列出了一部分:

    EXECUTE stu_proc3 '李%'/*传递给@name的实参为'李%'*/

    通过查询分析器运行,结果如图6-2-6所示。

    

                                         图6-2-6  EXECUTE stu_proc3 '[王李]%'    

    通过查询分析器运行,结果如图6-2-7所示。

    

                                          图6-2-7 EXECUTE stu_proc3 '%'

    通过查询分析器运行,结果如图6-2-8所示。

    

                                        图6-2-8   EXECUTE stu_proc3

    通过查询分析器运行,由于未提供实参,运行出错。结果如图6-2-9所示。

    

                                       图6-2-9

    五、带输出(OUTPUT)参数的存储过程

    创建一用于计算指定学生成绩总分的存储过程。该存储过程中使用了一个输入参数和一个输出参数。

    USE teachdb  
IF EXISTS (SELECT name FROM sysobjects WHERE name= 'stu_proc4' and type='P')  
  DROP PROCEDURE stu_proc4  
  GO   
  CREATE PROCEDURE stu_proc4  
  @name varchar(40),@total float OUTPUT  
  AS   
  SELECT @total=SUM(choice.score) FROM student,course,choice  
  WHERE student.s_name=@name  and student.s_no=choice.s_no and course.c_no=choice.c_no  
  GROUP BY student.s_no

    为了在运行该存储过程时能接收输出参数返回的值,需要用一个局部变量作为实参传递,并要加上OUTPUT关键字。在查询分

析器中使用以下语句运行存储过程stu_proc4。

 DECLARE @totalA float  
  EXECUTE stu_proc4 '袁敏', @totalA OUTPUT /*OUTPUT变量必须在定义存储过程和使用该存储过程时都进行定义*/   PRINT '袁敏的总分为:' +CAST (@totalA AS char)  
  GO

    通过查询分析器运行,结果如图6-2-10所示。

    

                                       图6-2-10

顶一下
()
%
踩一下
()
%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
推荐内容
  • 修改、删除及查看存储过程

    创建存储过程之后,可以通过企业管理器或在查询分析器中执行Transact-SQL语言的ALTER P

  • 创建及使用存储过程

    用企业管理器创建存储过程stu_proc1,要求能从学生表查询学号为102的学生信息。在企业管理器中

  • SQL存储过程

    在大型的数据库系统中,很多情况下,许多代码被重复使用多次,每次都输入相同的代码不但繁琐,更由于在客户

  • 服务器角色及应用程序角色

    前面我们已经介绍了数据库角色的概念和操作,数据库角色中可以包括用户以及其它的数据库角色。如下图所示,

  • 数据库用户帐户及权限管理

    1.登录帐号与用户帐号当用户通过身份验证,以某个登录帐号连接到SQL Server以后,还必须取得相

  • SQL Server 2000 登录认证

    SQL Server数据库系统通常运行在基于NT构架的Windows 2000上,而Windows

  • SQL Server 2000 系统安全机制

    SQL Server 作为一个网络数据库管理系统,具有完备的安全机制,能够确保数据库中的信息不被非法

  • 事务的使用

    一.事务的概念 所谓事务(Transaction ),是指一个操作序列,这些操作序列要么都被

  • 修改和删除触发器

    若要修改触发器的定义,可以使用Alter Trigger语句来完成,也可以使用企业管理器来完成这个任

  • 创建触发器

    触发器是一类特殊的存储过程,其特殊性在于它并不需要由用户来直接调用,而是在对表或视图发出Insert