数据库存储过程精.ppt
数据库存储过程数据库存储过程第1页,本讲稿共49页10 10 存存 储储 过过 程程 1.1.存储过程的概念存储过程的概念2.2.创建存储过程创建存储过程 3.3.执行存储过程执行存储过程 4.4.存储过程的管理与维护存储过程的管理与维护 第2页,本讲稿共49页1.存储过程的概念存储过程的概念 SQL ServerSQL Server应用操作中应用操作中,存储过程和触存储过程和触发器扮演相当重要的角色发器扮演相当重要的角色,不仅能提高应用不仅能提高应用效率效率,确保一致性确保一致性,更能提高系统执行速度。更能提高系统执行速度。同时,使用触发器来完成业务规则,达到同时,使用触发器来完成业务规则,达到简化程序设计的目的。简化程序设计的目的。第3页,本讲稿共49页1.存储过程的概念存储过程的概念 存储过程包括系统存储过程和用户存储过程。存储过程包括系统存储过程和用户存储过程。存储过程包括系统存储过程和用户存储过程。存储过程包括系统存储过程和用户存储过程。系统存储过程:系统存储过程:系统存储过程:系统存储过程:Execute sp_help Execute sp_help Execute sp_help Execute sp_help 表名表名 :查看表的结构。:查看表的结构。Execute sp_helpindex Execute sp_helpindex 表名表名 :查看表上的索引信息。:查看表上的索引信息。:查看表上的索引信息。:查看表上的索引信息。Execute sp_helptext Execute sp_helptext 视图名:查看视图的定义信视图名:查看视图的定义信视图名:查看视图的定义信视图名:查看视图的定义信息息息息 。第4页,本讲稿共49页1.存储过程的概念存储过程的概念存储过程按返回的数据类型,可分为两存储过程按返回的数据类型,可分为两类:类:一类类似于一类类似于SELECTSELECT语句语句,用于查询数据,用于查询数据,查询到的数据以结果集的形式给出;查询到的数据以结果集的形式给出;另一类另一类存储过程是通过输出参数返回信息存储过程是通过输出参数返回信息,或不返,或不返回信息只执行一个动作。回信息只执行一个动作。存储过程可以嵌套,存储过程可以嵌套,即一个存储过程的内部可以调用另一个存储即一个存储过程的内部可以调用另一个存储过程。过程。第5页,本讲稿共49页1.存储过程的概念存储过程的概念(1 1)基本概念)基本概念存存储储过过程程是是一一组组编编译译在在单单个个执执行行计计划划中中的的Transact-SQLTransact-SQLTransact-SQLTransact-SQL语语句句,它它将将一一些些固固定定的的操操作作集集集集中中中中起起起起来来来来交交交交给给给给SQL ServerSQL ServerSQL ServerSQL Server数据库服务器完成,以实现某个任务。数据库服务器完成,以实现某个任务。存存储储过过程程就就是是预预先先编编译译和和优优化化并并存存储储于于数数据据库库中中的过程。的过程。第6页,本讲稿共49页1.存储过程的概念存储过程的概念(2)存储过程的优点1 1)通通过过本本地地存存储储、代代码码预预编编译译和和缓缓存存技技术术实实现现高性能的数据操作。高性能的数据操作。2 2)通通过过通通用用编编程程结结构构和和过过程程重重用用实实现现编编程程框框架。架。3 3 3 3)通过隔离和加密的方法提高了数据库的安全性。)通过隔离和加密的方法提高了数据库的安全性。)通过隔离和加密的方法提高了数据库的安全性。)通过隔离和加密的方法提高了数据库的安全性。第7页,本讲稿共49页1.存储过程的概念存储过程的概念使用存储过程的好处1 1)允许模块化的程序设计。)允许模块化的程序设计。2 2)更快的执行速度。)更快的执行速度。3 3)有效降低网络流量。)有效降低网络流量。4 4)较好地安全机制。)较好地安全机制。第8页,本讲稿共49页1.存储过程的概念存储过程的概念(3)存储过程的类型 1 1)系统存储过程)系统存储过程 系统存储过程(系统存储过程(System Stored System Stored ProceduresProcedures)主要存储在)主要存储在mastermaster数据库中,数据库中,以以sp_sp_开头,用来进行系统的各项设定,获开头,用来进行系统的各项设定,获取信息,从而为系统管理员管理取信息,从而为系统管理员管理SQL ServerSQL Server提供支持。提供支持。第9页,本讲稿共49页1.存储过程的概念存储过程的概念(3)存储过程的类型 1 1)系统存储过程)系统存储过程)系统存储过程)系统存储过程系统存储过程我们以前接触过:系统存储过程我们以前接触过:Execute sp_help Execute sp_help 表名表名表名表名 :查看表的结构。:查看表的结构。Execute sp_helpindex Execute sp_helpindex 表名表名表名表名 :查看表上的索引信:查看表上的索引信:查看表上的索引信:查看表上的索引信息。息。息。息。Execute sp_helptext Execute sp_helptext Execute sp_helptext Execute sp_helptext 视图名视图名视图名视图名:查看视图的定义信息。:查看视图的定义信息。:查看视图的定义信息。:查看视图的定义信息。SQL Server SQL Server SQL Server SQL Server提供了很多系统存储过程,他们用于系提供了很多系统存储过程,他们用于系提供了很多系统存储过程,他们用于系提供了很多系统存储过程,他们用于系统管理、用户登录管理、权限设置、数据库对象管理、统管理、用户登录管理、权限设置、数据库对象管理、统管理、用户登录管理、权限设置、数据库对象管理、统管理、用户登录管理、权限设置、数据库对象管理、数据复制等操作。数据复制等操作。数据复制等操作。数据复制等操作。第10页,本讲稿共49页1.存储过程的概念存储过程的概念(3)存储过程的类型 2 2)用户自定义的存储过程)用户自定义的存储过程 用户定义的存储过程可分为用户定义的存储过程可分为用户定义的存储过程可分为用户定义的存储过程可分为本地存储过程本地存储过程本地存储过程本地存储过程(Local Local Stored ProceduresStored Procedures)、)、)、)、远程存储过程远程存储过程远程存储过程远程存储过程(Remote Stored(Remote Stored(Remote Stored(Remote Stored Procedures)Procedures)Procedures)Procedures)、临时存储过程临时存储过程临时存储过程临时存储过程(Temporary Stored(Temporary Stored Procedures)Procedures)、扩展存储过程扩展存储过程(Extended Stored(Extended Stored Procedures)Procedures)等。等。等。等。在这里我们只讨论本地存储过程。在这里我们只讨论本地存储过程。在这里我们只讨论本地存储过程。在这里我们只讨论本地存储过程。第11页,本讲稿共49页1.存储过程的概念存储过程的概念(3)存储过程的类型 2 2)用户自定义的存储过程)用户自定义的存储过程 由用户在当前工作的数据库中创建的存由用户在当前工作的数据库中创建的存储过程,称作本地存储过程。储过程,称作本地存储过程。事实上一般所事实上一般所说的存储过程指的就是本地存储过程。说的存储过程指的就是本地存储过程。第12页,本讲稿共49页2.2.创建存储过程创建存储过程 创建用户自定义存储过程有两种方法:可以使用T-SQL语言的CREATE PROCEDURE语句创建存储过程,也可以使用对象资源管理器向导创建存储过程。第13页,本讲稿共49页2.2.创建存储过程创建存储过程创建和使用存储过程都必须遵循如下的规则:1 1)创建存储过程的权限默认为属于数据库所有者,该所有)创建存储过程的权限默认为属于数据库所有者,该所有者可以把次权限授予其他用户。者可以把次权限授予其他用户。2 2)存储过程是数据库对象,其名称必须遵守标识符规则。名称标识)存储过程是数据库对象,其名称必须遵守标识符规则。名称标识符的长度最大为符的长度最大为128128位,且数据库中必须惟一。位,且数据库中必须惟一。3 3)只能在当前数据库中创建存储过程。)只能在当前数据库中创建存储过程。4 4)每个存储过程最多可以使用)每个存储过程最多可以使用10241024个参数。个参数。5 5)存储过程最大支持)存储过程最大支持3232层嵌套。层嵌套。第14页,本讲稿共49页2.2.创建存储过程创建存储过程(1)创建不带参数的存储过程创建存储过程的基本语法如下:创建存储过程的基本语法如下:CREATE PROCEDURE CREATE PROCEDURE 存储过程名存储过程名 WITH ENCRYPTIONWITH ENCRYPTION对存储过程加密对存储过程加密对存储过程加密对存储过程加密WITH RECOMPILEWITH RECOMPILE对存储过程重新编译对存储过程重新编译对存储过程重新编译对存储过程重新编译AS AS SQLSQL语句语句第15页,本讲稿共49页2.2.创建存储过程创建存储过程(1)创建不带参数的存储过程执行存储过程的基本语法如下:执行存储过程的基本语法如下:执行存储过程的基本语法如下:执行存储过程的基本语法如下:EXECUTE EXECUTE 存储过程名存储过程名 如果该存储过程是批处理中第一条语句,则如果该存储过程是批处理中第一条语句,则如果该存储过程是批处理中第一条语句,则如果该存储过程是批处理中第一条语句,则EXECEXECEXECEXEC可以省略。可以省略。可以省略。可以省略。简简简简单单单单存存存存储储储储过过过过程程程程类类类类似似似似于于于于将将将将一一一一组组组组SQLSQLSQLSQL语语语语句句句句起起起起个个个个名名名名字字字字,然然然然后后后后就就就就可可可可以以以以在需要时反复调用。复杂一些的则要有输入和输出参数。在需要时反复调用。复杂一些的则要有输入和输出参数。在需要时反复调用。复杂一些的则要有输入和输出参数。在需要时反复调用。复杂一些的则要有输入和输出参数。第16页,本讲稿共49页2.2.创建存储过程创建存储过程【实例实例实例实例】在学生成绩管理数据库中,创建一个名为在学生成绩管理数据库中,创建一个名为在学生成绩管理数据库中,创建一个名为在学生成绩管理数据库中,创建一个名为“grade_prograde_prograde_prograde_pro”的的的的存储过程,用于查询不及格学生的成绩信息(包括学号,姓名,课程名存储过程,用于查询不及格学生的成绩信息(包括学号,姓名,课程名存储过程,用于查询不及格学生的成绩信息(包括学号,姓名,课程名存储过程,用于查询不及格学生的成绩信息(包括学号,姓名,课程名称,成绩)。称,成绩)。称,成绩)。称,成绩)。USE USE USE USE 学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统GOGOGOGOcreate procedure grade_procreate procedure grade_procreate procedure grade_procreate procedure grade_proasasasasselect select select select 学生表学生表学生表学生表.学号学号学号学号,姓名姓名姓名姓名,课程名课程名课程名课程名,分数分数分数分数from from from from 学生表学生表学生表学生表,课程表课程表课程表课程表,成绩表成绩表成绩表成绩表where where where where 学生表学生表学生表学生表.学号学号学号学号=成绩表成绩表成绩表成绩表.学号学号学号学号and and and and 课程表课程表课程表课程表.课程号课程号课程号课程号=成绩表成绩表成绩表成绩表.课程号课程号课程号课程号and and and and 分数分数分数分数60606060gogogogo第17页,本讲稿共49页2.2.创建存储过程创建存储过程【实例实例实例实例】针对教师表针对教师表TeacherTeacher,创建一个名为,创建一个名为teacher_pro1teacher_pro1的存储过程,用于查询所有男教师的信的存储过程,用于查询所有男教师的信息。息。USE USE USE USE 学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统GOGOcreate procedure teacher_procreate procedure teacher_proasasasasselect*select*from from from from 教师表教师表where where where where 性别性别性别性别=男男 gogogogo第18页,本讲稿共49页 执行存储过程执行存储过程 在存储过程建立好后,该存储过程作为数据库对象已经存在,其名称和文件分别存放在sysobjects和syscomments系统表中。可以使用T-SQL的EXECUTE语句来执行存储过程。如果该存储过程是批处理中第一条语句,则EXEC关键字可以省略。执行存储过程的基本语法如下:EXECUTE 存储过程名第19页,本讲稿共49页2.2.创建存储过程创建存储过程(2)创建带输入参数的存储过程一个存储过程可以带一个或多个输入参一个存储过程可以带一个或多个输入参数,输入参数是指由调用程序向存储过程传数,输入参数是指由调用程序向存储过程传递的参数,它们在递的参数,它们在创建存储过程语句中被定创建存储过程语句中被定义义,在,在执行存储过程中给出相应的参数值执行存储过程中给出相应的参数值。第20页,本讲稿共49页2.2.创建存储过程创建存储过程(2)创建带输入参数的存储过程创建带输入参数的存储过程的语法格式如下:创建带输入参数的存储过程的语法格式如下:CREATE PROCEDURE CREATE PROCEDURE 存储过程名存储过程名 参数名参数名 数据类型数据类型=默认值默认值,.n,.nWITH ENCRYPTIONWITH ENCRYPTIONWITH RECOMPILEWITH RECOMPILEAS AS SQLSQL语句语句第21页,本讲稿共49页2.2.创建存储过程创建存储过程【例例例例10-210-210-210-2】从学生表中返回指定学号的学生的信息。从学生表中返回指定学号的学生的信息。从学生表中返回指定学号的学生的信息。从学生表中返回指定学号的学生的信息。create procedure u_getstudentcreate procedure u_getstudentnumber varchar(40)number varchar(40)number varchar(40)number varchar(40)asasselect*select*select*select*from from from from 学生表学生表where where 学号学号=number=number=number=number第22页,本讲稿共49页 执行存储过程执行存储过程(2 2)执行带参数的存储过程)执行带参数的存储过程 在执行存储过程的语句中,有两种方式来传递参数值,分别是使用参数名传递参数值和按参数位置传递参数值。使用参数名传递参数值,是通过语句“参数名=参数值”给参数传递值。当存储过程含有多个输入参数时,参数值可以按任意顺序制定,对于允许空值和具有默认值的输入参数可以不给出参数的传递值。第23页,本讲稿共49页执行存储过程执行存储过程(2 2)执行带参数的存储过程)执行带参数的存储过程 1)使用参数名传递参数值 执行使用参数名传递参数值的存储过程的语法格式如下。EXECUTE 存储过程名 参数名=参数值,.n第24页,本讲稿共49页执行存储过程执行存储过程【实例】执行【实例10-2】创建的存储过程u_getstudentexecute u_getstudent number=1002第25页,本讲稿共49页 执行存储过程执行存储过程(2 2)执行带参数的存储过程)执行带参数的存储过程 2)按位置传送参数值 在执行存储过程的语句中,不参照被传递的参数而直接在执行存储过程的语句中,不参照被传递的参数而直接给出参数的传递值。当存储过程含有多个输入参数时,传递给出参数的传递值。当存储过程含有多个输入参数时,传递值的顺序必须与存储过程中定义的输入参数的顺序相一致。值的顺序必须与存储过程中定义的输入参数的顺序相一致。按位置传递参数值的存储过程的语法格式如下。EXECUTE EXECUTE 存储过程名 参数值参数值1,参数值2,.n第26页,本讲稿共49页 执行存储过程执行存储过程【实例】执行【实例10-2】创建的存储过程u_getstudentexecute u_getstudent 1002第27页,本讲稿共49页执行存储过程执行存储过程 可以看到,可以看到,按参数位置传递参数值比按参按参数位置传递参数值比按参数名传递参数值简洁数名传递参数值简洁,比较适合参数值较少的比较适合参数值较少的情况情况;而而按参数名传递参数使程序可读性增强按参数名传递参数使程序可读性增强。特别是参数数量较多时,建议使用按参数名称特别是参数数量较多时,建议使用按参数名称传递参数的方法,这样的程序可读性、可维护传递参数的方法,这样的程序可读性、可维护性都要好一些。性都要好一些。第28页,本讲稿共49页2.2.创建存储过程创建存储过程【例例例例10-310-3】创建带有通配符参数的存储过程。创建带有通配符参数的存储过程。下面的存储过程只从学生表中返回指定一些学生下面的存储过程只从学生表中返回指定一些学生下面的存储过程只从学生表中返回指定一些学生下面的存储过程只从学生表中返回指定一些学生(提供名字提供名字提供名字提供名字和姓氏和姓氏和姓氏和姓氏)的信息。该存储过程对传递的参数进行模式匹配,如的信息。该存储过程对传递的参数进行模式匹配,如的信息。该存储过程对传递的参数进行模式匹配,如的信息。该存储过程对传递的参数进行模式匹配,如果没有提供参数,则返回所有学生的信息。果没有提供参数,则返回所有学生的信息。果没有提供参数,则返回所有学生的信息。果没有提供参数,则返回所有学生的信息。create procedure u_getstudentbynamecreate procedure u_getstudentbynamename varchar(40)=%=%as select*from 学生表学生表where where 姓名姓名姓名姓名like namegogo第29页,本讲稿共49页执行存储过程执行存储过程执行存储过程,可以按多种组合执行。执行存储过程,可以按多种组合执行。execute u_getstudentbyname execute u_getstudentbyname execute u_getstudentbyname 张张%execute u_getstudentbyname execute u_getstudentbyname 张刘张刘张刘张刘 第30页,本讲稿共49页2.2.创建存储过程创建存储过程(3)创建带输出参数的存储过程 如果我们需要从存储过程中如果我们需要从存储过程中返回一个或返回一个或多个值多个值,可以通过在,可以通过在创建存储过程的语句中创建存储过程的语句中定义输出参数来实现定义输出参数来实现,为了使用输出参数,为了使用输出参数,需要在需要在CREATE PROCEDURECREATE PROCEDURE语句中指定语句中指定OUTPUTOUTPUT关键字。关键字。第31页,本讲稿共49页2.2.创建存储过程创建存储过程(3)创建带输出参数的存储过程创建带输出参数的存储过程的语法格式如下:创建带输出参数的存储过程的语法格式如下:CREATE PROCEDURE CREATE PROCEDURE 存储过程名存储过程名 参数名参数名 数据类型数据类型 VARYING=VARYING=VARYING=VARYING=默认值默认值默认值默认值 OUTPUT,.n OUTPUT,.n OUTPUT,.n OUTPUT,.nWITH ENCRYPTIONWITH ENCRYPTIONWITH RECOMPILEWITH RECOMPILEAS AS SQLSQL语句语句第32页,本讲稿共49页2.2.创建存储过程创建存储过程【例例例例10-410-410-410-4】创建一个存储过程创建一个存储过程创建一个存储过程创建一个存储过程U_getstudentaveagebydeptU_getstudentaveagebydeptU_getstudentaveagebydeptU_getstudentaveagebydept,获得,获得,获得,获得某个院系的学生的平均年龄。某个院系的学生的平均年龄。某个院系的学生的平均年龄。某个院系的学生的平均年龄。create procedure u_getstudentaveagebydeptcreate procedure u_getstudentaveagebydeptcreate procedure u_getstudentaveagebydeptcreate procedure u_getstudentaveagebydeptdept varchar(40),aveage int outdept varchar(40),aveage int outdept varchar(40),aveage int outdept varchar(40),aveage int outas as as as select select select select aveage=aveage=aveage=aveage=avg(year(getdate()-year(avg(year(getdate()-year(avg(year(getdate()-year(avg(year(getdate()-year(出生日期出生日期出生日期出生日期)from from from from 学生表学生表学生表学生表where where where where 院系名称院系名称院系名称院系名称=dept=dept=dept=deptgogogogo第33页,本讲稿共49页执行存储过程执行存储过程存储过程的执行:存储过程的执行:declare aveage intexecute u_getstudentaveagebydept 计算机计算机学院学院,aveage outprint aveage第34页,本讲稿共49页2.2.创建存储过程创建存储过程【实例实例】创建一个存储过程创建一个存储过程ssc_pro3ssc_pro3,获得选取某门课程的选课,获得选取某门课程的选课人数。人数。USE USE 学生成绩管理系统学生成绩管理系统GOGOcreate procedure s_pro3create procedure s_pro3sname varcharsname varchar(30),count(30),count int outint outas as select countselect count=countcount(*)(*)from from 学生表学生表,课程表课程表,成绩表成绩表where where 学生表学生表.学号学号=成绩表成绩表.学号学号 and and 课程表课程表.课程号课程号=成绩表成绩表.课程号课程号 and and 课程名课程名=sname=snamegogo第35页,本讲稿共49页3.3.执行存储过程执行存储过程 在存储过程建立好后,该存储过程作为数据库对象已经存在,其名称和文件分别存放在sysobjects和syscomments系统表中。可以使用T-SQL的EXECUTE语句来执行存储过程。如果该存储过程是批处理中第一条语句,则EXEC关键字可以省略。执行存储过程的基本语法如下:EXECUTE 存储过程名第36页,本讲稿共49页3.3.执行存储过程执行存储过程(1 1)执行不带参数的存储过程)执行不带参数的存储过程【实例8-378-37】执行执行【实例实例8-328-32】中创建的名为“grade_pro”的存储过程,用于查询不及格学生的成绩信的存储过程,用于查询不及格学生的成绩信息(包括学号,姓名,课程名称,成绩)。息(包括学号,姓名,课程名称,成绩)。Exec grade_pro【实例实例8-38】执行执行【实例8-338-33】创建的名为teacher_pro1teacher_pro1的存储过程,用于查询所有男教师的信息。Exec teacher_pro1Exec teacher_pro1 第37页,本讲稿共49页3.3.执行存储过程执行存储过程(2 2)执行带参数的存储过程)执行带参数的存储过程 在执行存储过程的语句中,有两种方式来传递参数值,分别是使用参数名传递参数值和按参数位置传递参数值。使用参数名传递参数值,是通过语句“参数名=参数值”给参数传递值。当存储过程含有多个输入参数时,参数值可以按任意顺序制定,对于允许空值和具有默认值的输入参数可以不给出参数的传递值。第38页,本讲稿共49页3.3.执行存储过程执行存储过程(2 2)执行带参数的存储过程)执行带参数的存储过程 1)使用参数名传递参数值 执行使用参数名传递参数值的存储过程的语法格式如下。EXECUTE 存储过程名 参数名=参数值,.n第39页,本讲稿共49页3.3.执行存储过程执行存储过程【实例实例8-39】执行执行【实例8-348-34】创建的存储过程ssc_pro1,使用输入参数(课程名称),用于查询某门课,使用输入参数(课程名称),用于查询某门课程的选修情况,包括学号,姓名,课程名称和成绩。程的选修情况,包括学号,姓名,课程名称和成绩。EXEC ssc_pro1 scname=数据库技术【实例8-408-40】执行【实例实例8-36】创建的存储过程ssc_pro3,获得选取某门课程的选课人数。DECLARE ccount INTDECLARE ccount INTEXEC ssc_pro3 scname=数据库技术数据库技术,ccount=ccount OUTPUT,ccount=ccount OUTPUTPRINT 选修数据库技术课程的人数为:选修数据库技术课程的人数为:,ccount第40页,本讲稿共49页3.3.执行存储过程执行存储过程(2 2)执行带参数的存储过程)执行带参数的存储过程 2)按位置传送参数值 在执行存储过程的语句中,不参照被传递的参数而直接给出参数的传递值。当存储过程含有多个输入参数时,传递值的顺序必须与存储过程中定义的输入参数的顺序相一致。按位置传递参数值的存储过程的语法格式如下。EXECUTE 存储过程名 参数值1,参数值2,.n2,.n第41页,本讲稿共49页3.3.执行存储过程执行存储过程【实例8-41】执行【实例实例8-348-34】创建的存储过程ssc_pro1,使用输入参数(课程名称),用于查询某门课程的选修情况,包括学号,姓名,课程名称和成绩。EXEC ssc_pro1 数据库技术数据库技术【实例8-42】执行执行【实例实例8-36】创建的存储过程ssc_pro3ssc_pro3,获得选取某门课程的选课人数。DECLARE ccount INTEXEC ssc_pro3 数据库技术,ccount OUTPUTSELECT 选修数据库技术课程的人数为:选修数据库技术课程的人数为:,ccount第42页,本讲稿共49页3.3.执行存储过程执行存储过程 可以看到,可以看到,按参数位置传递参数值比按参按参数位置传递参数值比按参数名传递参数值简洁数名传递参数值简洁,比较适合参数值较少的比较适合参数值较少的情况情况;而而按参数名传递参数使程序可读性增强按参数名传递参数使程序可读性增强。特别是参数数量较多时,建议使用按参数名称特别是参数数量较多时,建议使用按参数名称传递参数的方法,这样的程序可读性、可维护传递参数的方法,这样的程序可读性、可维护性都要好一些。性都要好一些。第43页,本讲稿共49页4.4.存储过程的管理与维护存储过程的管理与维护(1 1)查看存储过程)查看存储过程 存储过程建立好后,该存储过程作为数据库对象已经存在,其名称和文件分别存放在sysobjects和和syscomments系统表中。我们可以通过对象资源管理器查看存储过程的源代码,也可以通过SQL Server提供提供的系统存储过程来查看用户创建的存储过程信息。的系统存储过程来查看用户创建的存储过程信息。可以使用对象资源管理器和系统存储过程来查看用户自可以使用对象资源管理器和系统存储过程来查看用户自定义存储过程。定义存储过程。第44页,本讲稿共49页4.4.存储过程的管理与维护存储过程的管理与维护(1 1)查看存储过程)查看存储过程 2)使用系统存储过程在查询分析器下,可以通过系统存储过程sp_helptext查看存储过程的定义;通过查看存储过程的定义;通过sp_helpsp_help查看存储过程的参数;通过sp_dependssp_depends查看存储过程的相关性。查看存储过程的相关性。【实例实例】在查询分析器下,使用系统存储过程,查看【实例10-210-2】创建的存储过程、参数和相关性。EXECUTE sp_helptext ssc_pro1EXECUTE sp_helptext ssc_pro1EXECUTE sp_help ssc_pro1EXECUTE sp_help ssc_pro1EXECUTE sp_depends ssc_pro1第45页,本讲稿共49页4.4.存储过程的管理与维护存储过程的管理与维护(2 2)修改存储过程)修改存储过程 修改存储过程通常是指编辑它的参数和修改存储过程通常是指编辑它的参数和T-SQL语句。语句。下面我们分别说明如何使用ALTER PROCEDUREALTER PROCEDURE命令完成这项工作。2)使用)使用ALTER PROSEDUREALTER PROSEDURE命令命令存储过程的修改是由存储过程的修改是由ALTERALTER语句来完成的,基本语法如下:语句来完成的,基本语法如下:ALTER PROCEDURE ALTER PROCEDURE 存储过程名WITH ENCRYPTIONWITH ENCRYPTIONWITH RECOMPILEWITH RECOMPILEAS AS SQLSQL语句语句 第46页,本讲稿共49页4.4.存储过程的管理与维护存储过程的管理与维护【例例例例10-610-6】修改原有的存储过程修改原有的存储过程修改原有的存储过程修改原有的存储过程u_getstudentbynameu_getstudentbyname,按照学生姓名的精确匹配查找学生信息。,按照学生姓名的精确匹配查找学生信息。,按照学生姓名的精确匹配查找学生信息。,按照学生姓名的精确匹配查找学生信息。alter procedure u_getstudentbynamealter procedure u_getstudentbynamename varchar(40)name varchar(40)as select*select*from 学生表where 姓名=namegogo第47页,本讲稿共49页4.4.存储过程的管理与维护存储过程的管理与维护(3 3)重命名存储过程)重命名存储过程 修改存储过程的名字,可以使用系统存储过程sp_renamesp_rename,其语法格式如下:sp_rename sp_rename 存储过程原名存储过程原名 存储过程新名存储过程新名 另外,通过对象资源管理器也可修改存储过程的名称,另外,通过对象资源管理器也可修改存储过程的名称,其操作过程与其操作过程与WindowsWindows下重命名文件名的操作类似。即先选定要重命名的存储过程,然后右键单击,在弹出的快捷菜单中选取“重命名”选项,输入新的存储过程的名称选项,输入新的存储过程的名称即可。即可。第48页,本讲稿共49页4.4.存储过程的管理与维护存储过程的管理与维护(4 4)删除存储过程)删除存储过程 存储过程的删除是通过DROPDROP语句来实现的,DROP命令可将一个或多个存储过程或者多个存储过程组从当前数据库中删除。其语法格式如下:DROP PROCEDURE DROP PROCEDURE 存储过程名存储过程名 ,nn 使用对象资源管理器同样也可以进行删除。其操作过程与Windows下删除文件的操作类似。即先选定要删除的存储过程,然后右键单击,在弹出的快捷菜单中选取“删除”选项,接着单击“除去对象除去对象”对话框中的对话框中的“全部出去”按钮即可。按钮即可。第49页,本讲稿共49页