第13章,sql文件怎么执行

文件 0
第13章 存储过程的应用 ◎本章教学微视频:21个120分钟 s学习指引 存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储过程是数据库中的一个重要对象,它代替了传统的逐条执行SQL语句的方式。
本章就来介绍数据库的存储过程,主要内容包括创建、调用、查看、修改、删除存储过程等。
重点导读 ·了解什么是存储过程。
·掌握创建存储过程的方法。
·掌握调用存储过程的方法。
·掌握查看存储过程的方法。
·掌握修改存储过程的方法。
·掌握删除存储过程的方法。
13.1存储过程概述 存储过程可以重复调用,当存储过程执行一次后,可以将语句缓存,这样下次执行的时候直接使用缓存中的语句,就可以提高存储过程的性能。
13.1.1什么是存储过程 存储过程是一组为了完成特定功能的SQL语句的集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程中可以包含逻辑控制语句和数据操作语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行比单个 SQLServer从入门到项目实践(超值版) 的SQL语句块要快。
同时由于在调用时只需要提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、减轻网络负担。
13.1.2存储过程的优点 相对于直接使用SQL语句,在应用程序中直接调用存储过程具有以下好处。

1.存储过程允许标准组件式编程存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。
而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大地提高了程序的可移植性。

2.存储过程能够实现较快的执行速度如果操作包含大量的SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。
因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划。
而批处理的SQL语句每次运行都需要预编译和优化,所以速度就要慢一些。

3.存储过程减轻网络流量对于同一个针对数据库对象的操作,如果这一操作所涉及的SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句,从而减轻了网络流量,降低了网络负载。

4.存储过程可被作为一种安全机制来充分利用系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。
13.1.3存储过程的缺点 任何一个事物都不是完美的,存储过程也不例外,除一些优点外,存储过程还具有如下缺点。
数据库移植不方便,存储过程依赖于数据库管理系统,SQLServer存储过程中封装的操作代码不能 直接移植到其他的数据库管理系统中。
不支持面向对象的设计,无法采用面向对象的方式将逻辑业务进行封装,甚至形成通用的可支持服 务的业务逻辑框架。
代码可读性差、不易维护。
不支持集群。
13.2存储过程的类型 在SQLServer中,存储过程主要分为自定义存储过程、扩展存储过程和系统存储过程,在存储过程中可以声明变量、执行条件判断语句等其他编程功能。
194 第13章存储过程的应用 13.2.1系统存储过程 系统存储过程是由SQLServer系统自身提供的存储过程,可以作为命令执行各种操作。
例如,sp_rename系统存储过程可以更改当前数据库中用户创建对象的名称;sp_helptext存储过程可以显示规则、默认值或视图的文本信息等。
SQLServer服务器中许多的管理工作都是通过执行系统存储过程来完成的,许多系统信息也可以通过执行系统存储过程来获得。
系统存储过程位于数据库服务器中,并且以sp_开头。
系统存储过程定义在系统定义和用户定义的数据库中,在调用时不必在存储过程前加数据库限定名。
系统存储过程创建并存放于系统数据库master中,一些系统存储过程只能由系统管理员使用,而有些系统存储过程通过授权可以被其他用户所使用。
13.2.2自定义存储过程 自定义存储过程即用户为了实现某一特定业务需求,在用户数据库中编写的SQL语句集合。
用户存储过程可以接受输入参数,向客户端返回结果和信息,返回输出参数等。
创建自定义存储过程时,存储过程名前面加上“##”表示创建了一个全局的临时存储过程;存储过程名前面加上“#”时,表示创建局部临时存储过程。
局部临时存储过程只能在创建它的会话中使用,会话结束时将被删除。
这两种存储过程都存储在系统数据库tempdb之中。
用户定义存储过程可以分为两类:Transact-SQL和CLR。
Transact-SQL存储过程是指保存的Transact-SQL语句集合,可以接受和返回用户提供的参数。
存储 过程也可能从数据库向客户端应用程序返回数据。
CLR存储过程是指引用Microsoft.NETFramework公共语言方法的存储过程,可以接受和返回用户 提供的参数,它们在.NETFramework程序集中是作为类的公共静态方法实现的。
13.2.3扩展存储过程 扩展存储过程是以在SQLServer环境外执行的动态链接(DLL文件)来实现的,可以加载到SQLServer实例运行的地址空间中执行,扩展存储过程可以用SQLServer扩展存储过程API编程,扩展存储过程以前缀“xp_”来标识,对于用户来说,扩展存储过程和普通存储过程一样,可以用相同的方法来执行。
13.3创建存储过程 存储过程是在数据库服务器端执行的一组SQL语句集合,经编译后存放在数据库服务器中,本节就来介绍如何创建存储过程。
13.3.1在SSMS中创建存储过程 在SSMS中可以使用向导创建存储过程,具体操作步骤如下。
步骤1:启动SSMS并连接到SQLServer数据库之中,打开SSMS窗口,选择“数据库”→mydbase→“可编程性”结点。
在“可编程性”结点下,右击“存储过程”结点,在弹出的快捷菜单中选择“新建”→ 195 SQLServer从入门到项目实践(超值版) “存储过程”菜单命令,如图13-1所示。
步骤2:打开创建存储过程的代码模板,这里显示了CREATEPROCEDURE语句模板,可以修改要创 建的存储过程的名称,然后在存储过程中的BEGINEND代码块中添加需要的SQL语句,最后单击“执行”按钮即可创建一个存储过程,如图13-2所示。
图13-1选择“新建”→“存储过程”菜单命令 图13-2使用模板创建存储过程 【例13-1】创建一个名称为Proc_emp的存储过程,要求该存储过程实现的功能为:在employee表中查询男员工的姓名、当前职位与基本工资,具体操作步骤如下。
步骤1:在创建存储过程的窗口中选择“查询”→“指定模板参数的值”菜单命令,如图13-3所示。
步骤2:弹出“指定模板参数的值”对话框,将Procedure_Name参数对应的名称修改为“Proc_emp”,单击“确定”按钮,即可关闭此对话框,如图13-4所示。
图13-3“指定模板参数的值”菜单命令 图13-4“指定模板参数的值”对话框 步骤3:在创建存储过程的窗口中,将对应的SELECT语句修改为以下语句,如图13-5所示。
SELECTe_name,e_job,e_salaryFROMemployeeWHEREe_gender='男'; 步骤4:单击“执行”按钮,即可完成存储过程的创建操作,执行结果如图13-6所示。
图13-5修改SELECT语句 196 图13-6创建存储过程 第13章存储过程的应用 13.3.2创建存储过程的语法格式 使用CREATEPROCEDURE语句可以创建存储过程,语法格式如下: CREATEPROCEDURE[schema_name.]procedure_name[;number]{@parameterdata_type}[VARYING][=default][OUT|OUTPUT][READONLY][WITH][FORREPLICATION]AS 主要参数介绍如下。
procedure_name:新存储过程的名称,并且在架构中必须唯
一。
可在procedure_name前面使用
个#字符号(#procedure_name)来创建局部临时过程,使用两个#字符号(##procedure_name)来创建全局临时过程。
对于CLR存储过程,不能指定临时名称。
number:是可选整数,用于对同名的过程分组。
使用一个DROPPROCEDURE语句可将这些分组过程一起删除。
例如,称为orders的应用程序可能使用名为orderproc;1、orderproc;2等的过程。
DROPPROCEDUREorderproc语句将删除整个组。
如果名称中包含分隔标识符,则数字不应包含在标识符中;只应在procedure_name前后使用适当的分隔符。
@parameter:存储过程中的参数。
在CREATEPROCEDURE语句中可以声明一个或多个参数。
除非定义了参数的默认值或者将参数设置为等于另一个参数,否则用户必须在调用过程时为每个声明的参数提供值。
存储过程最多可以有2100个参数。
如果过程包含表值参数,并且该参数在调用中缺失,则传入空表默认值。
通过将at符号(@)用作第一个字符来指定参数名称。
每个过程的参数仅用于该过程本身;其他过程中可以使用相同的参数名称。
默认情况下,参数只能代替常量表达式,而不能用于代替表名、列名或其他数据库对象的名称。
如果指定了FORREPLICATION,则无法声明参数。
date_type:指定参数的数据类型,所有数据类型都可以用作Transact-SQL存储过程的参数。
可以使用用户定义表类型来声明表值参数作为Transact-SQL存储过程的参数。
只能将表值参数指定为输入参数,这些参数必须带有READONLY关键字。
cursor数据类型只能用于OUTPUT参数。
如果指定了cursor数据类型,则还必须指定VARYING和OUTPUT关键字。
可以为cursor数据类型指定多个输出参数。
对于CLR存储过程,不能指定char、varchar、text、ntext、image、cursor、用户定义表类型和table作为参数。
default:存储过程中参数的默认值。
如果定义了default值,则无须指定此参数的值即可执行过程。
默认值必须是常量或NULL。
如果过程使用带LIKE关键字的参数,则可包含下列通配符:%、_、[]和[^]。
OUTPUT:指示参数是输出参数。
此选项的值可以返回给调用EXECUTE的语句。
使用OUTPUT参数将值返回给过程的调用方。
除非是CLR过程,否则text、ntext和image参数不能用作OUTPUT参数。
使用OUTPUT关键字的输出参数可以为游标占位符,CLR过程除外。
不能将用户定义表类型指定为存储过程的OUTPUT参数。
READONLY:指示不能在过程的主体中更新或修改参数。
如果参数类型为用户定义的表类型,则必须指定READONLY。
RECOMPILE:表明SQLServer2016不会保存该存储过程的执行计划,该存储过程每执行一次都要重新编译。
在使用非典型值或临时值而不希望覆盖保存在内存中的执行计划时,就可以使用RECOMPILE选项。
197 SQLServer从入门到项目实践(超值版) ENCRYPTION:表示SQLServer2016加密后的ments表,该表的text字段是包含CREATEPROCEDURE语句的存储过程文本。
使用ENCRYPTION关键字无法通过查看ments表来查看存储过程的内容。
FORREPLICATION:用于指定不能在订阅服务器上执行为复制创建的存储过程。
使用此选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。
本选项不能和WITHRECOMPILE选项一起使用。
AS:用于指定该存储过程要进行的操作。
sql_statement:是存储过程中要包含的任意数目和类型的Transact-SQL语句。
但有一些限制。
13.3.3创建不带参数的存储过程 最简单的一种自定义存储过程就是不带参数的存储过程,下面介绍如何创建一个不带参数的存储过程。
【例13-2】创建查看mydbase数据库中employee表的存储过程,SQL语句如下: USEmydbase;GOCREATEPROCEDUREProc_emp_01ASSELECT*FROMemployee; GO 单击“执行”按钮,即可完成存储过程的创建操作,执行结果如图13-7所示。
另外,存储过程可以是很多语句的复杂组合,其本身也可以调用其他函数,来组成更加复杂的操作。
【例13-3】创建一个获取employee表记录条数的存储过程,名称为Count_Proc,SQL语句如下: USEmydbase;GOCREATEPROCEDURECount_ProcASSELECTCOUNT(*)AS总数FROM GO employee; 输入完成之后,单击“执行”按钮,即可完成存储过程的创建操作,执行结果如图13-8所示。
图13-7创建不带参数的存储过程 图13-8创建存储过程Count_Proc 13.3.4创建带输入参数的存储过程 在设计数据库应用系统时,可能会需要根据用户的输入信息产生对应的查询结果,这时就需要把用户的输入信息作为参数传递给存储过程,即开发者需要创建带输入参数的存储过程。
【例13-4】创建存储过程Proc_emp_02,根据输入的员工编号,查询员工的相关信息,如姓名、所在职位与基本工资,SQL语句如下: 198 第13章存储过程的应用 USEmydbase;GOCREATEPROCEDUREProc_emp_02ASSELECT*FROMemployeeWHERE @sIDINTe_no=@sID; GO 输入完成之后,单击“执行”按钮,即可完成存储过程的创建操作,该段代码创建一个名为Proc_emp_02 的存储过程,使用一个整数类型的参数@sID来执行存储过程,如图13-9所示。
【例13-5】创建带默认参数的存储过程Proc_emp_03,输入语句如下: USEmydbase;GOCREATEPROCEDUREProc_emp_03ASSELECT*FROMemployeeWHERE @sIDINT=101e_no=@sID; GO 输入完成之后,单击“执行”按钮,即可完成带默认输入参数存储过程的创建操作,该段代码创建的 存储过程在调用时即使不指定参数值也可以返回一个默认的结果集,如图13-10所示。
图13-9创建存储过程Proc_emp_02 图13-10创建存储过程Proc_emp_03 13.3.5创建带输出参数的存储过程 存储过程中的默认参数类型是输入参数,如果要为存储过程指定输出参数,还要在参数类型后面加上OUTPUT关键字。
【例13-6】定义存储过程Proc_emp_04,根据用户输入的部门编号,返回该部门中员工的个数,SQL语句如下: USEmydbase;GOCREATEPROCEDUREProc_emp_04@sIDINT=
1,@employeecountINTOUTPUTASSELECT@employeecount=COUNT(employee.dept_no)FROMemployeeWHEREdept_no=@sID;GO 输入完成之后,单击“执行”按钮,即可完成带输出参数存储过程的创建操作。
该段代码将创建一个名称为Proc_emp_04的存储过程,该存储过程中有两个参数,@sID为输出参数,指定要查询的员工部门编号的id,默认值为1;@employeecount为输出参数,用来返回该部门中员工的个数,如图13-11所示。
199 SQLServer从入门到项目实践(超值版) 图13-11定义存储过程Proc_emp_04 13.3.6创建带加密选项的存储过程 所谓加密选项并不是对存储过程中查询出来的内容加密,而是将创建存储过程本身的语句加密,通过对创建存储过程的语句加密,可以在一定程度上保护存储过程中用到的表信息,同时也能提高数据的安全性。
带加密选项的存储过程使用的是withencryption。
【例13-7】定义带加密选项的存储过程Proc_emp_05,查询员工的姓名、当前职位与基本工资信息,SQL语句如下: USEmydbase;CREATEPROCEDUREProc_emp_05WITHENCRYPTIONASBEGINSELECTe_name,e_job,e_salaryEMD FROMemployee; 输入完成之后,单击“执行”按钮,即可完成带加密选项存储过程的创建操作,执行结果如图13-12所示。
图13-12创建带加密选项的存储过程 13.4执行存储过程 当存储过程创建完毕后,下面就可以执行存储过程了,本节就来介绍执行存储过程的方法。
13.4.1执行存储过程的语法格式 在SQLServer2016中执行存储过程时,需要使用EXECUTE语句,如果存储过程是批处理中的第一条语句,那么不使用EXECUTE关键字也可以执行该存储过程,EXECUTE语法格式如下: [{EXEC|EXECUTE}]{[@return_status=]{module_name[;number]|@module_name_var}[[@parameter=]{value|@variable[OUTPUT][,...n][WITHRECOMPILE]} |[DEFAULT] }] 主要参数介绍如下。
@return_status:可选的整型变量,存储模块的返回状态。
这个变量在用于EXECUTE语句前,必 200 第13章存储过程的应用 须在批处理、存储过程或函数中声明过。
在用于调用标量值用户定义函数时,@return_status变量可以为任意标量数据类型。
module_name:是要调用的存储过程的完全限定或者不完全限定名称。
用户可以执行在另一数据库中创建的模块,只要运行模块的用户拥有此模块或具有在该数据库中执行该模块的适当权限。
number:可选整数,用于对同名的过程分组。
该参数不能用于扩展存储过程。
@module_name_var:是局部定义的变量名,代表模块名称。
@parameter:存储过程中使用的参数,与在模块中定义的相同。
参数名称前必须加上符号@。
在与@parameter_name=value格式一起使用时,参数名和常量不必按它们在模块中定义的顺序提供。
但是,如果对任何参数使用了@parameter_name=value格式,则对所有后续参数都必须使用此格式。
默认情况下,参数可为空值。
value:传递给模块或传递命令的参数值。
如果参数名称没有指定,参数值必须以在模块中定义的顺序提供。
@variable:是用来存储参数或返回参数的变量。
OUTPUT:指定模块或命令字符串返回一个参数。
该模块或命令字符串中的匹配参数也必须使用关键字OUTPUT创建。
使用游标变量作为参数时使用该关键字。
DEFAULT:根据模块的定义,提供参数的默认值。
当模块需要的参数值没有定义默认值并且缺少参数或指定了DEFAULT关键字时,会出现错误。
WITHRECOMPILE:执行模块后,强制编译、使用和放弃新计划。
如果该模块存在现有查询计划,则该计划将保留在缓存中。
如果所提供的参数为非典型参数或者数据有很大的改变,使用该选项。
该选项不能用于扩展存储过程。
建议尽量少使用该选项,因为它消耗较多的系统资源。
13.4.2执行不带参数的存储过程 存储过程创建完成后,可以通过EXECUTE语句来执行创建的存储过程,该命令可以简写为EXEC。
【例13-8】执行不带参数的存储过程Proc_emp_01,来查看员工信息,SQL语句如下: USEmydbase;GOEXECProc_emp_01; 单击“执行”按钮,即可完成执行不带参数存储过程的操作,这里是查询员工信息表,执行结果如图13-13所示。
提示:EXECUTE语句的执行是不需要任何权限的,但是操 作EXECUTE字符串内引用的对象是需要相应的权限的,例如, 如果要使用DELETE语句执行删除操作,则调用EXECUTE语句 执行存储过程的用户必须具有DELETE权限。
图13-13执行不带参数的存储过程 13.4.3执行带输入参数的存储过程 执行带输入参数的存储过程时,SQLServer提供了如下两种传递参数的方式。

(1)直接给出参数的值,当有多个参数时,给出的参数的顺序与创建存储过程的语句中的参数的顺序一致,即参数传递的顺序就是定义的顺序。

(2)使用“参数名=参数值”的形式给出参数值,这种传递参数的方式的好处是,参数可以按任意的顺序给出。
201 SQLServer从入门到项目实践(超值版) 【例13-9】执行带输入参数的存储过程Proc_emp_02,根据输入的员工编号,查询员工信息,这里员工编号可以自行定义,如这里定义的员工编号为102,SQL语句如下: USEmydbase;GOEXECUTEProc_emp_02102; 单击“执行”按钮,即可完成执行带输入参数存储过程的操作,执行结果如图13-14所示。
【例13-10】执行带输入参数的存储过程Proc_emp_03,根据输入的员工编号,查询员工信息,这里员工编号可以自行定义,如这里定义的员工编号为103,SQL语句如下: USEmydbase;GOEXECUTEProc_emp_02@sID=103; 单击“执行”按钮,即可完成执行带输入参数存储过程的操作,执行结果如图13-15所示。
图13-14执行带输入参数的存储过程 图13-15执行带输入参数的存储过程 提示:执行带有输入参数的存储过程时需要指定参数,如果没有指定参数,系统会提示错误,如果希望不给出参数时存储过程也能正常运行,或者希望为用户提供一个默认的返回结果,可以通过设置参数的默认值来实现。
13.4.4执行带输出参数的存储过程 执行带输出参数的存储过程,既然有一个返回值,为了接收这一返回值,需要一个变量来存放返回参 数的值,同时,在执行这个存储过程时,该变量必须加上OUTPUT关键字来声明。
【例13-11】执行带输出参数的存储过程Proc_emp_04,并将返回结果保存到@employeecount变量中。
USEmydbase;GODECLARE@employeecountINT;DECLARE@sIDINT=1;EXECProc_emp_04@sID,@employeecountOUTPUTSELECT'该部门一共有'+LTRIM(STR(@employeecount))+'员工'GO 单击“执行”按钮,即可完成执行带输出参数存储过程的 操作,执行结果如图13-16所示。
13.4.5在SSMS中执行存储过程 图13-16执行带输出参数的存储过程 除了使用SQL语句执行存储过程之外,还可以在SSMS中以界面方式执行存储过程,具体步骤如下。
步骤1:右击要执行的存储过程,这里选择名称为Proc_emp_04的存储过程。
在弹出快捷菜单中选择“执行存储过程”菜单命令,如图13-17所示。
202 第13章存储过程的应用步骤2:打开“执行过程”窗口,在“值”列中输入参数值:@sID=
2,如图13-18所示。
图13-17选择“执行存储过程”菜单命令 图13-18“执行过程”窗口 步骤3:单击“确定”按钮执行带输入参数的存储过程,执行结果如图13-19所示。
图13-19存储过程执行结果 13.5修改存储过程 修改存储过程可以改变存储过程当中的参数或者语句,可以通过SQL语句中的ALTERPROCEDURE语句来实现,还可以在SSMS中以界面方式修改存储过程。
13.5.1修改存储过程的语法格式 使用ALTERPROCEDURE语句可以修改存储过程,在修改存储过程时,SQLServer会覆盖以前定义的存储过程,语法格式如下: ALTERPROCEDURE[schema_name.]procedure_name[;number]{@parameterdata_type}[VARYING][=default][OUT|OUTPUT][READONLY][WITH][FORREPLICATION]AS 提示:除了ALTER关键字之外,这里其他的参数与CREATEPROCEDURE中的参数作用相同。
203 SQLServer从入门到项目实践(超值版) 13.5.2使用SQL语句修改存储过程 使用SQL语句可以修改存储过程,下面给出一个实例,来介绍使用SQL语句修改存储过程的方法。
【例13-12】通过ALTERPROCEDURE语句修改名为Count_Proc存储过程,具体操作步骤如下。
步骤1:打开SSMS,并连接到SQLServer中的数据库,然后选择存储过程所在的数据库,如这里选 择mydbase,如图13-20所示。
步骤2:单击工具栏中的“新建查询”按钮 ,新建查询编辑器,并输入以下SQL语句,将 SELECT语句查询的结果按部门编号dept_no进行分组。
USEmydbaseGOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERPROCEDURE[dbo].[Count_Proc]AS SELECTdept_no,COUNT(*)AS总数FROMemployeeGROUPBYdept_no; 步骤3:单击“执行”按钮,即可完成修改存储过程的操作,如图13-21所示。
图13-20选择mydbase 步骤4:下面执行修改后的Count_Proc存储过程,SQL语句如下: USEmydbase;GOEXECCount_Proc; 单击“执行”按钮,即可完成存储过程的执行操作,执行结果如图13-22所示。
图13-21修改存储过程 13.5.3在SSMS中修改存储过程 图13-22执行修改后的存储过程 在SSMS中可以以界面方式修改存储过程,具体的操作步骤如下。
步骤1:登录SQLServer服务器之后,在SSMS中打开“对象资源管理器”窗口,选择“数据库”结点下创建存储过程的数据库,选择“可编程性”→“存储过程”结点,右击要修改的存储过程,在弹出的快捷菜单中选择“修改”菜单命令,如图13-23所示。
步骤2:打开存储过程的修改窗口,用户即可修改存储过程,然后单击“保存”按钮即可,如图13-24所示。
注意:ALTERPROCEDURE语句只能修改一个单一的存储过程,如果过程调用了其他存储过程,嵌套的存储过程不受影响。
204 第13章存储过程的应用 图13-23选择“修改”菜单命令 图13-24修改存储过程窗口 13.6重命名存储过程 重命名存储过程可以修改存储过程的名称,这样可以将不符合命名规则的存储过程的名称根据统一的命名规则进行更改。
13.6.1在SSMS中重命名存储过程 重命名存储过程可以在SSMS中以界面方式来轻松地完成,具体操作步骤如下。
步骤1:选择需要重命名的存储过程,右击鼠标,并在弹出的快捷菜单中选择“重命名”菜单命令,如图13-25所示。
步骤2:在显示的文本框中输入要修改的新的存储过程的名称,这里输入“dbo.Count_Proc_01”,按Enter键确认即可,如图13-26所示。
图13-25选择“重命名”菜单命令 图13-26输入新的名称 注意:输入新名称之后,在对象资源管理器中的空白地方单击鼠标,或者直接按回车键确认,即可完成修改操作。
也可以在选择一个存储过程之后,间隔一小段时间,再次单击该存储过程;或者选择存储过程之后,直接按F2键。
这几种方法都可以完成存储过程名称的修改。
13.6.2使用sp_name系统存储过程重命名 使用系统存储过程sp_rename也可以重命名存储过程,语法格式如下: sp_renameoldObjectName,newObjectName 205 SQLServer从入门到项目实践(超值版) 主要参数介绍如下。
oldObjectName:存储过程的旧名称。
newObjectName:存储过程的新名称。
【例13-13】重命名存储过程Count_Proc_01为“CountProc”,SQL语句如下: sp_renameCount_Proc_01,CountProc 单击“执行”按钮,即可完成存储过程的重命名操作,执行结果如图13-27所示。
图13-27重命名存储过程 13.7查看存储过程 创建完存储过程之后,需要查看修改后的存储过程的内容,查询存储过程有两种方法,一种是使用SSMS对象资源管理器查看,另一种是使用T-SQL语句查看。
13.7.1使用SSMS查看存储过程信息 在SSMS中可以以界面方式查看存储过程信息,具体的操作步骤如下。
步骤1:登录SQLServer服务器之后,在SSMS中打开“对象资源管理器”窗口,选择“数据库”结点下创建存储过程的数据库,选择“可编程性”→“存储过程”结点,右击要修改的存储过程,在弹出的快捷菜单中选择“属性”菜单命令,如图13-28所示。
步骤2:弹出“存储过程属性”窗口,用户即可查看存储过程的具体属性,如图13-29所示。
图13-28选择“属性”菜单命令 图13-29“存储过程属性”窗口 13.7.2使用系统存储过程查看信息 许多系统存储过程、系统函数和目录视图都提供有关存储过程的信息,可以使用这些系统存储过程来查看存储过程的定义,即用于创建存储过程的T-SQL语句。
可以通过下面三种系统存储过程和目录视图查看存储过程。
206 第13章存储过程的应用
1.使用sys.sql_modules查看存储过程的定义sys.sql_modules为系统视图,通过该视图可以查看数据库中的存储过程。
【例13-14】查看存储过程CountProc相关信息,SQL语句如下: select*fromsys.sql_modules 单击“执行”按钮,即可完成查看sys.sql_modules系统视图的操作,执行结果如图13-30所示。
图13-30查看存储过程的信息
2.使用OBJECT_DEFINITION查看存储过程的定义返回指定对象定义的T-SQL源文本,语法格式如下: SELECTOBJECT_DEFINITION(OBJECT_ID); 主要参数OBJECT_ID为要使用的对象的ID,object_id的数据类型为int,并假定表示当前数据库上下文中的对象。
【例13-15】使用OBJECT_DEFINITION查看存储过程的定义,SQL语句如下: USEmydbase;GOSELECTOBJECT_DEFINITION(OBJECT_ID('CountProc')); 单击“执行”按钮,即可完成使用OBJECT_DEFINITION查看存储过程定义的操作,执行结果如图13-31所示。
图13-31查看存储过程的定义
3.使用sp_helptext查看存储过程的定义显示用户定义规则的定义、默认值、未加密的T-SQL存储过程、用户定义T-SQL函数、触发器、计算列、CHECK约束、视图或系统对象,语法格式如下: sp_helptext[@objname=]'name'[,[@columnname=puted_column_name] 主要参数介绍如下。
[@objname=]'name':架构范围内的用户定义对象的限定名称和非限定名称。
[@columnname=puted_column_name]:要显示定义信息的计算列的名称,必须将包含列的表指 207 SQLServer从入门到项目实践(超值版) 定为name。
column_name的数据类型为sysname,无默认值。
【例13-16】通过sp_helptext系统存储过程查看名为CountProc的相关定义信息,SQL语句如下: USEmydbase;GOEXECsp_helptextCountProc 单击“执行”按钮,即可完成通过sp_helptext查看存储过程的相关定义信息,执行结果如图13-32所示。
图13-32 使用sp_helptext查看存储过程的定义 13.8删除存储过程 不需要的存储过程可以删除,删除存储过程有两种方法,一种是通过图形化工具删除,另一种是使用T-SQL语句删除。
13.8.1在SSMS中删除存储过程 删除存储过程可以在对象资源管理器中轻松地完成。
具体操作步骤如下。
步骤1:选择需要删除的存储过程,右击鼠标,在弹出的快捷菜单中选择“删除”菜单命令,如图13-33所示。
步骤2:打开“删除对象”窗口,单击“确定”按钮,完成存储过程的删除,如图13-34所示。
图13-33选择“删除”命令 提示:该方法一次只能删除一个存储过程。
图13-34“删除对象”窗口 13.8.2使用SQL语句删除存储过程 使用DROPPROCEDURE语句可以删除存储过程,该语句可以从当前数据库中删除一个或多个存储过程,语法格式如下: DROP{PROC|PROCEDURE}{[schema_name.]procedure}[,...n] 208 第13章存储过程的应用 schema_name:存储过程所属架构的名称。
不能指定服务器名称或数据库名称。
procedure:要删除的存储过程或存储过程组的名称。
【例13-17】删除存储过程CountProc,SQL语句如下: USEmydbase;GODROPPROCEDUREdbo.CountProc 输入完成之后,单击“执行”命令,即可删除名称为CountProc的存储过程,如图13-35所示。
删除之后,可以刷新“存储过程”结点,即可查看删除结果,可以看到名称为CountProc的存储过程不存在了,如图13-36所示。
图13-35删除存储过程CountProc 图13-36“对象资源管理器”窗口 13.9扩展存储过程 扩展存储过程使用户能够在编程语言(如
C、C++)中创建自己的外部程序。
扩展存储过程的显示方式和执行方式与常规存储过程一样,可以将参数传递给扩展存储过程,且扩展存储过程也可以返回结果和状态。
扩展存储过程是SQLServer实例可以动态加载和运行的DLL,使用SQLServer扩展存储过程API编写的,可直接在SQLServer实例的地址空间中运行。
SQLServer中常规扩展存储过程如表13-1所示。
名称xp_enumgroupsxp_findnextmsgxp_grantloginxp_logeventxp_loginconfigxp_logininfoxp_msverxp_revokeloginxp_sprintfxp_sqlmaintxp_sscanfxp_availablemediaxp_dirtree 表13-1常规扩展过程 说明提供Windows本地组列表或在指定Windows域中定义的全局组列表接受输入的邮件ID并返回输出的邮件ID,需要与xp_processmail配合使用授予Windows组或用户对SQLServer2016的访问权限将用户定义消息记入SQLServer2016日志文件和Windows事件查看器报告SQLServer2016实例在Windows上运行时的登录安全配置报告账户、账户类型、账户的特权级别、账户的映射登录名和账户访问SQLServer2016的权限路径返回有关SQLServer2016的版本信息撤销Windows组或用户对SQLServer2016的访问权限设置一系列字符和值的格式并将其存储到字符串输出参数值。
每个格式参数都用相应的参数替换用包含SQLMaint开关的字符串调用SQLMaint实用工具,在一个或多个数据库上执行一系列维护操作将数据从字符串读入每个格式参数所指定的参数位置查看系统上可用的磁盘驱动器的空间信息查看某个目录下子目录的结构 209 SQLServer从入门到项目实践(超值版) 【例13-18】执行xp_msver扩展存储过程,查看系统版本信息,在查询编辑窗口中输入语句如下。
USEmydbase;GOEXECxp_msver 单击“执行”按钮,即可完成使用扩展过程查看系统版本信息的操作,这里返回的信息包含数据库的产品信息、产品编号、运行平台、操作系统的版本号以及处理器类型信息等,执行结果如图13-37所示。
图13-37查询数据库系统信息 13.10就业面试技巧与解析 面试官:删除存储过程需要注意什么问题?应聘者:存储过程之间可以相互调用,如果删除被调用的存储过程,那么重新编译时调用者会出现错误,所以在进行删除操作时,最好要分清各个存储过程之间的关系。
210

标签: #苹果 #怎么改 #优盘 #画质 #垃圾文件 #美工 #文件 #怎么弄