




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 存储过程和触发器【学习目标】本章将要学习存储过程和触发器的基本概念、作用和基本操作。本章学习要点:u 存储过程的概念、作用、分类;u 存储过程的创建、查看、修改和执行;u 触发器的主要作用、类型;u inserted表和deleted表的作用和使用;u 触发器的创建方法、查看、修改和执行。【学习导航】存储过程(store procedure)和触发器(trigger)是sql server 数据库系统重要的数据库对象,在以sql server 2005 为后台数据库创建的应用程序中具有重要的应用价值。本章主要内容见图10-1所示的学习导航。图10-1 本章内容学习导航10.1 存储过
2、程概述transact-sql语言是应用程序与sql server数据库之间的主要编程接口,大量的时间将花费在transact-sql语句和应用程序代码上。在很多情况下,许多代码被重复使用多次,每次都输入相同的代码不但繁琐,更由于在客户机上的大量命令语句逐条向sql server 发送,将降低系统运行效率。因此,sql server提供了一种方法,它将一些固定的操作集中起来由sql server数据库服务器来完成,应用程序只需调用它的名称,就可实现某个特定任务,这种方法就是存储过程。下面将详细介绍存储过程的概念、特点、创建、执行等内容。10.1.1 存储过程的概念sql server 中t-s
3、ql语言为了实现特定任务而将一些需要多次调用的固定的操作编写成子程序并集中以一个存储单元的形式存储在服务器上,由sql server数据库服务器通过子程序名来调用它们,这些子程序就是存储过程。存储过程是一种数据库对象,存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行,具有很强的编程功能。存储过程可以使用execute语句来运行。在sql server中使用存储过程而不使用存储在客户端计算机本地的t-sql程序有以下几个方面的好处。(1)加快系统运行速度。存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般sql语句每执行依次就编译一次,所以使用
4、存储过程可提高数据库执行速度。(2)封装复杂操作。当对数据库进行复杂操作时(如对多个表进行update insert,query,delete时),可用存储过程将此复杂操作封装起来与数据库提供的事务处理结合一起使用。(3)实现代码重用。可以实现模块化程序设计,存储过程一旦创建,以后即可在程序中调用任意多次,这可以改进应用程序的可维护性,并允许应用程序统一访问数据库。(4)增强安全性。可设定特定用户具有对指定存储过程的执行权限而不具备直接对存储过程中引用的对象具有权限;可以强制应用程序的安全性;参数化存储过程有助于保护应用程序不受sql注入式攻击。(5)减少网络流量。因为存储过程存储在服务器上,
5、并在服务器上运行。一个需要数百行t-sql代码的操作可以通过一条执行过程代码的语句来执行;而不需要在网络中发送数百行代码,这样就可以减少网络流量。10.1.2 存储过程的分类在sql server 2005中存储过程可以分为两类:系统存储过程和用户存储过程。1系统存储过程系统存储过程是由sql server系统提供的存储过程,可以作为命令执行各种操作。系统存储过程主要用来从系统表中获取信息,为系统管理员管理sql server 提供帮助,为用户查看数据库对象提供方便。例如,执行sp_helptext系统存储过程可以显示规则、默认值、未加密的存储过程、用户函数、触发器或视图的文本信息;执行sp_
6、depends系统存储过程可以显示有关数据库对象相关性的信息;执行sp_rename系统存储过程可以更改当前数据库中用户创建对象的名称。sql server中许多管理工作是通过执行系统存储过程来完成的,许多系统信息也可以通过执行系统存储过程而获得。系统存储过程定义在系统数据库master中,其前缀是sp_。在调用时不必在存储过程前加上数据库名。有关系统存储过程的详细介绍请参考sql server联机丛书。除了以sp_为前缀的系统存储过程,我们还常见到以xp_为前缀的存储过程,这种存储过程为扩展存储过程。扩展存储过程主要用于扩展sql server的功能。2用户存储过程用户存储过程是指用户根据自
7、身需要,为完成某一特定功能,在用户数据库中创建的存储过程。用户创建存储过程时,存储过程名的前面加上“#”,是表示创建全局临时存储过程;在存储过程名的前面加上“#”,是表示创建局部临时存储过程。局部临时存储过程只能在创建它的会话中可用,当前会话结束时除去;全局临时存储过程可以在所有会话中使用,即所有用户均可以访问该过程。它们都保存在tempdb数据库中。10.1.3存储过程的创建与管理在sql server 2005 中通常可以使用两种方法创建存储过程:一种是使用图形化管理工具sql server management studio 创建存储过程;另一种是使用t-sql 语句创建存储过程。创建存
8、储过程时,需要注意下列事项: 只能在当前数据库中创建存储过程。 创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。 在用户存储过程的定义中不能使用下列对象创建语句:create view、create default、create rule、create procedure、create trigger。即在存储过程的创建中不能嵌套创建以上这些对象。存储过程创建后,可以使用execute语句来执行(可以简写为exec),如果它是一个批处理中的第一条语句,则关键字execute(或exec)也可省略。1
9、0.1.4 使用ssms创建和执行存储过程【案例10-1】执行系统存储过程sp_help查看教务管理数据库stu中class表的信息。程序清单:use stugoexec sp_help class 运行以上程序,结果如图10-2所示。图10-2 执行系统存储过程sp_help查看class表信息【案例10-2】在数据库stu中,创建一个名称为“stu_softjs”的存储过程,通过该存储过程可查询出软件工程系所有教授的信息。操作步骤如下:(1)启动sql server management studio,在【对象资源管理器】窗口中,依次展开【数据库】【stu】【可编程性】节点。(2)右键单击
10、【存储过程】节点,选择【新建存储过程】命令,打开【创建存储过程模版】文档窗口,如图10-3所示。(3)用户在模版文档窗口中根据相应提示输入存储过程名称和t-sql语句。创建存储过程“stu_softjs”,如图10-4所示。(4)单击【执行】按钮,完成存储过程的创建。【提示】·在模板文档窗口中可以把不必要的参数去掉。·在第(2)步骤右键单击“存储过程”节点,选择“刷新”,即可看到刚刚创建好的存储过程。图10-3 【创建存储过程模版】文档窗口图10-4 创建存储过程“stu_softjs”【案例10-3】使用ssms执行上面例子中创建的存储过程“stu_softjs”。 启动
11、sql server management studio,在【对象资源管理器】中依次展开【数据库】【student】【可编程性】【存储过程】节点。 右键单击【stu_softjs】存储过程,选择【执行存储过程】命令,如图10-5所示。 打开【执行过程】对话框,再单击【确定】按钮即可。图10-5 选择【执行存储过程】命令10.1.5 使用ssms查看、修改和删除存储过程【案例10-4】使用ssms,查看上例中创建的存储过程“stu_softjs”的属性。(1)在如图10-5所示的右键菜单中,选择【属性】菜单,打开【存储过程属性】对话框。(2)选择【常规】选项卡:可以查看到该存储过程属于哪个数据库
12、、创建如期和属于男个数据库用户等信息。(3)选择【权限】选项卡:可以为该存储过程添加用户并授予其权限。(4)选择【扩展属性】选项卡:可以了解排序规则等扩展属性。【提示】在如图10-4所示的右键菜单中,选择“删除”菜单命令可以删除指定的存储过程;选择“修改”命令进入存储过程文本修改状态,可对存储过程进行修改;选择“重命名” 可以实现存储过程的名称的更改。10.1.6 使用t-sql语句创建和执行存储过程1.创建存储过程使用t-sql语句create proc可以创建存储过程,其基本语句格式如下所示。create procedure 存储过程名参数1 数据类型=默认值 output, nwhti
13、encryptionrecompileassql语句参数含义:u 存储过程名:要符合标识符规则,少于128个字符。u 参数:过程中的参数。在create procedure语句中可以声明一个或多个参数。u output:表明该参数是一个返回参数。u as:用于指定该存储过程要执行的操作。u sql语句:是存储过程中要包含的任意数目和类型的t-sql语句。u encryption:用于加密存储过程文本。本加密的存储过程,其图标上有“加锁”标志,其定义内容不可修改,也不可通过系统存储过程sp_helptext查看。u recompile:设置该选项后,存储过程将在运行时重新编译。【案例10-5】在
14、“stu”数据库中,创建一个存储过程“stu_softxs”,通过该存储过程可以查询软件技术专业的学生信息。(1) 在“查询编辑器”窗口中输入如下代码:use stu gocreate proc stu_softxsas select *from studentwhere s_classid in(select c_id from classwhere sp_id in (select sp_id from specialitywhere sp_name=软件技术)go(2) 单击“分析”按钮,进行语法检查;再单击“执行”按钮,创建存储过程。2.执行存储过程执行存储过程的基本语句格式:exec
15、 procedure_name value_list参数含义: procedure_name:要执行的存储过程的名称。 value_list:输入参数值。【案例10-6】执行以上存储过程“stu_softxs”。代码如下:use stugoexec stu_softxsgo执行以上代码,结果如图10-6所示。图10-6 执行存储过程“stu_softxs”结果10.1.7 创建和执行带参数的存储过程带参数的存储过程可以扩展存储过程的功能。使用输入参数,可以将外部信息输入到存储过程;使用输出参数,可以将存储过程内的信息转到外部。创建带参数的存储过程时,参数可以是一个,也可以是多个,多个参数时,参
16、数之间用逗号分隔。所有数据类型均可以作为存储过程的参数,一般情况下,参数的数据类型要与它相关的字段的数据类型一致。1. 带有输入参数的存储过程【案例10-7】在“stu”数据库中,创建存储过程“stu_zymc”,该存储过程带有一个用于接收用户输入专业名称的输入参数。该存储过程要求被执行时,它将根据用户输入的专业名称列出该专业的所有班级信息。代码如下:create proc stu_zymc zymc varchar(20)/*变量参数的数据类型与长度都要和表中相关字段的定义一致*/asselect * from classwhere sp_id in(select sp_id from sp
17、ecialitywhere sp_name=zymc)go执行该存储过程“stu_zymc”,代码如下:use stugoexec stu_zymc 软件技术go执行结果如图10-7所示。【提示】执行带参数的存储过程,有两种方式。·按位置转递。在调用存储过程时,直接给出参数值。如果多于一个参数,给出的参数值要与定义的参数顺序一致。例如:exec stu_zymc 软件技术。·使用参数名称转递。在调用存储过程时,按“参数名=参数值”的形式给出参数值。采用此方式,参数如果多于一个时,给出的参数顺序可以与定义的参数的顺序不一致。例如:exec stu_zymc zymc=软件技术
18、。图10-7 执行存储过程显示出相应专业的班级信息2. 带有参数默认值的存储过程【案例10-8】如果要求上例中创建的存储过程stu_zymc在被执行时不给出参数值将默认显示软件技术专业的班级信息,则创建该存储过程的代码为:/*变量参数的默认值是“软件技术”专业*/ create proc stu_zymc zymc varchar(20) =软件技术 as select * from class where sp_id in(select sp_id from specialitywhere sp_name=zymc)go 不带参数值执行该存储过程,代码:exec stu_zymc3. 带有输
19、出参数的存储过程输出参数用于在存储过程中返回值,使用output声明输出参数。【案例10-9】在stu数据库中,创建一个带有输出参数的存储过程stu_xspjf,其中输出参数用于返回学号为0501010102的学生的平均成绩。创建该存储过程代码:use stugo/*输出参数的数据类型要与它接收的值的类型一致*/create proc stu_xspjf xspjf tinyint outputasselect xspjf=avg(sc_grade)from stucoursewhere s_num='0501010102'go执行该存储过程并输出显示的代码如下,执行结果如图1
20、0-8所示。use stugodeclare avg tinyintexec stu_xspjf avg outputprint '学号为0501010102的同学的平均分为:'+ltrim(str(avg)+'分'【提示】执行带有输出参数的存储过程时,需要声明变量来接收存储过程中由输出参数返回来的返回值。一般情况下,声明的变量的数据类型要与存储过程的输出参数的数据类型一致。在使用该变量时,还必须为它加上output 声明。图10-8 执行带有输出参数的存储过程并输出显示信息10.1.8 使用t-sql语句查看、修改和删除存储过程1 使用ssms查看、修改和删除
21、存储过程请参阅【案例10-4】、【提示】和图10-5。2.使用系统存储过程查看存储过程信息(1)使用sp_help 查看存储过程的一般信息,包含存储过程的名称、拥有者、类型和创建时间,其语法格式为:exec sp_help 存储过程名(2)使用sp_helptext查看存储过程的定义信息,其语法格式为:exec sp_helptext 存储过程名【案例10-10】分别使用系统存储过程sp_help和sp_helptext查看stu数据库中的存储过程“stu_xspjf”的定义、相关性及一般信息。代码如下,结果如图10-9所示。use stugoexec sp_help stu_xspjfexe
22、c sp_helptext stu_xspjfgo 图10-9 使用系统存储过程查看存储过程信息3.使用语句修改存储过程使用alter procedure语句可以更改先前通过执行create procedure语句创建的过程,alter procedure基本语句格式如下。alter procedure 存储过程名参数1 数据类型=默认值output,.参数 n 数据类型=默认值outputassql语句.各参数含义与create procdure语句相同,只是把创建时的create 改为了 alter。因为修改和创建时的过程方法一样,在这里不再另外举例说明。4.使用语句删除存储过程当存储过程
23、没有存在的意义时,可以使用drop procedure 语句将其删除。用于删除存储过程的基本语句格式:drop procedure 存储过程名,n【案例10-11】删除“stu”数据库中的存储过程“stu_xspjf”。代码如下:use stu go drop procedure stu_xspjfgo10.2 触发器概述10.2.1 触发器的概念1.触发器的作用触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效,实现表间的数据完整性和复杂的业务规则。与前面介绍过的存储过程不同,存储过程可以通过存储过程名字被直接调用,而触发器不能,触发器主要通过事件进行触发而自动执行的。当
24、对某一表进行诸如insert、update或delete操作时,如果在这些操作上定义了触发器,sql server就会自动执行触发器(执行触发器中所定义的sql语句),从而确保对数据的处理必须符合由这些sql语句所定义的规则。触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性,除此之外,触发器还有其他许多不同的功能。 强化约束:触发器能够实现比check语句更为复杂的约束。check约束不允许引用其他表中的列来完成检查工作,而触发器可以引用其他表中的列。 跟踪变化:触发器可以侦测数据库的操作,从而不允许数据库中未经许可的指定更新和变化。 级联运行:触发器可以侦
25、测数据库内的操作,并自动地级联影响整个数据库的相关内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如插入、更新、删除),而该操作又导致该表上触发器被触发。2.触发器类型在sql server2005中,触发器分为dml触发器和ddl触发器两大类。当数据库中发生数据操作语言(dml)事件时将调用dml触发器,当服务器或数据库中发生数据定义语言(ddl)事件时将调用ddl触发器。dml触发器是当数据库服务器中发生数据库操作语言(dml)事件时要执行的操作。dml事件包括对表或视图发出的update、insert或delete 语句。dml触发器用于在数据库修改时强制执行业务规则,以及扩
26、展sql server2005约束、默认值和规则的完整性检查逻辑。根据dml触发器被激活的时机不同又可以分为after触发器和instead of 触发器。 after触发器又称为后触发器。在执行了insert、update 或delete语句操作之后执行after触发器。指定after触发器与指定for相同,它是microsoft sql server早期版本中唯一可用的选项,但after触发器只能在表上指定。 instead of触发器又称为替代触发器。该类触发器代替触发器操作执行,即触发器在数据发生变动之前被触发,取代变动数据的操作(insert、update或delete操作),执行触
27、发器定义的操作。该类触发器既可在表上定义,也可在视图上定义。对于每个触发器操作(insert、update和delete)只能定义一个instead of触发器。ddl触发器是sql server2005的新增功能。ddl触发器是一种特殊的触发器,它不会为响应针对表或视图的update、insert或delete语句而激发。相反,它在响应数据定义语言(ddl)语句时触发,这些语句主要是以create、alter和drop开头的语句。它们可以用于数据库中执行管理任务,例如,审核以及规范数据库操作。因为ddl触发器和dml触发器可以使用相似的sql语法进行创建、修改和删除,它们还具有其他相似的行为
28、。所以这里只介绍dml触发器的创建与使用。10.2.2 inserted表和deleted表系统为每个触发器创建两个特殊临时表:inserted表和deleted表。这两个表都是逻辑表,由系统管理存储在内存中,它们在结构上与该触发器作用的表相同。这两个表是只读,用户不能对其修改和写入内容,但可以在触发器执行过程中引用这两个表中的数据。当触发器工作完成后,与该触发器相关的这两个表也被删除。 inserted表用于存储insert和update语句所影响的行的副本。如果表存在insert 触发器,向表中插入数据时,系统将自动创建一个与触发器具有相同表结构的inserted临时表,新的记录被添加到触
29、发器表和inserted表中。inserted表就是用来存储向原表插入的纪录副本。deleted表用于存储delete和update语句所影响的行的副本。在执行delete或update语句时,从触发器表中删除原记录,并把删除的记录的副本临时存放到daleted表中。这样做的目的是:一旦触发器遇到了强迫它中止的语句被执行时,删除的那些行可以从deleted表中得以恢复。【提示】修改表中的数据,相当于删除一条旧的记录,添加一条新的记录。其中,被删除的记录放在deleted表中,添加的新的记录放在inserted表中。10.2.3 创建与管理触发器1使用t-sql创建与管理触发器t-sql语言使用
30、create trigger命令创建触发器。创建dml触发器的基本语句格式:create trigger 触发器名on 表| 视图for|after|instead ofinsert|update|deleteas dml语句【案例10-12】在stu数据库的学生表student中创建一个触发器tr_scxs,当学生表student有记录被删除时,显示“xxx同学信息已被你成功删除!”。创建该触发器代码如下:create trigger tr_scxson studentfor deleteasbegindeclare xsxx char(10)select xsxx=s_name from
31、deletedprint xsxx +同学信息已被你成功删除! end 创建触发器后,删除一条记录,验证该触发器,代码如下: use stugodelete student where s_num='0806010101'执行以上删除记录语句后,结果如图10-10所示。图10-10 删除记录激活触发器返回信息【提示】·虽然dml触发器可以引用临时表,但不能对临时表或系统表创建dml触发器。·对含有用delete或update操作定义的外键的表,不能定义instead of delete和instead of update触发器。·truncate
32、tablb 语句不会触发delete触发器,因为truncate tablb语句没有执行记录。【案例10-13】在stu数据库中创建一个删除触发器tr_delxs,当表student中的记录要被删除时,激活该触发器,显示“不能删除本表中的数据!请与管理员联系!”的提示信息。创建该触发器代码如下:use stugocreate trigger tr_delxs on studentinstead of delete asprint 不能删除本表中的数据!请与管理员联系!go创建该触发器后,删除一条记录,验证触发器,代码如下:use stugodelete student where s_num=
33、'0602010102'执行以上删除记录语句后,结果如图10-11所示。再重新打开student表时发现学号为0602010102的学生记录还在,没有被删除。图10-11 要删除记录时激活触发器并返回信息2使用ssms创建触发器【案例10-14】为“stu”数据库的stucourse表创建一个更新触发器tr_upsc,当更新了该表中的x条记录信息时,显示“你已经成功更新的记录信息有x条!”。操作步骤如下:(1)启动sql server management studio,在【对象资源管理器】中依次展开【数据库】【stu】【表】节点。(2)展开stucourse表,右键单击【触发
34、器】,选择【新建触发器】,如图10-12所示。(3)打开【新建触发器】模板文档窗口,根据相应提示输入创建触发器的文本,创建代码如下。(4)执行创建触发器的语句,语句成功执行后,则创建好触发器。创建该触发器代码如下: use stugocreate trigger tr_upsc on stucourse after updateas begindeclare num tinyintselect num=count(*) from insertedprint /*你已经成功更新的记录信息有'+ltrim(str(num)+'条!*/endgo使用update语句更新表stucou
35、rse中学号为0501010103的学生成绩,每门成绩都减少5分,验证该触发器的功能,如图10-13所示。图10-12 选择新建触发器图10-13 更新信息激发触发器返回信息10.2.4 查看触发器信息1.使用系统存储过程查看触发器使用系统存储过程sp_helptrigger和sp_helptext可以查看触发器,但作用有所差异:使用sp_helptrigger返回的是触发器的类型,而使用sp_helptext则显示触发器的定义文本。使用系统存储过程sp_helptrigger查看触发器的基本语句格式如下:sp_helptrigger 表名 ,触发器类型使用系统存储过程sp_helptext查
36、看触发器的基本语句格式如下:sp_helptext 触发器名【案例10-15】查看student表中所有触发器的相关信息,同时也显示触发器tr_delxs的定义文本。代码如下:use stugosp_helptrigger studentgosp_helptext tr_delxsgo2 使用ssms查看触发器信息使用ssms查看触发器的相关信息的步骤如下。(1) 启动sql server management studio,在【对象资源管理器】窗口中,依次展开【数据库】【stu】表(如student表)【触发器】节点。(2) 在【触发器】节点中,右击需要查看的触发器,在快捷菜单中选择【查看依
37、赖关系】命令,在【对象依赖关系】对话框中,可以查看该触发器和相关表的依赖关系。在快捷菜单中选择【修改】命令,可以查看触发器的定义文本信息。【提示】在第(2)步骤的右键快捷菜单中选择“修改”命令,也可以对触发器重新修改定义;选择“删除”命令可以删除该触发器。10.2.5 修改触发器1. 使用t-sql语言修改触发器t-sql语言使用alter trigger命令修改dml触发器,基本语句格式如下。alter trigger 触发器名on 表| 视图for | after |instead of insert |update |deleteassql语句修改触发器与创建触发器的语法基本相同,只是将
38、创建触发器的create关键字换成了alter关键字而已,在这里不再举例说明它的用法。2. 使用ssms修改触发器请参阅“使用ssms查看触发器信息”部分。10.2.6 禁用、启用和删除触发器1.使用t-sql语句禁用、启用和删除触发器(1)禁用触发器可以使用dlsable trigger命令禁用dml触发器,基本语句格式如下:disable trigger 触发器名,n|allon 对象名 |数据库 | 服务器【案例10-17】禁用student表上的触发器tr_delxs。 代码如下: use stugodisable trigger tr_delxs on student【提示】
39、3;禁用触发器不会删除该触发器,该触发器仍然作为对象存在于当前数据库中。·禁用触发器后,执行相应的t-sql语句时,不会引发触发器。(2)启用触发器可以使用enable trigger命令启用dml触发器,基本语句格式如下:enable trigger 触发器名,n|allon 对象名 |数据库 | 服务器enable trigger 的基本使用同disable trigger,但作用相反。(3)删除触发器可以使用drop trigger命令删除dml触发器,基本语句格式如下:drop trigger 触发器,n【案例10-18】删除student表中的tr_delxs触发器。dro
40、p trigger tr_delxsgo【提示】:仅当所有触发器均使用相同的on 子句创建时,才能使用一个drop trigger 语句删除多个ddl触发器。2使用ssms禁用、启用和删除触发器使用sql server management studio禁用、启用和删除触发器的步骤如下:(1)启动sql server management studio,在【对象资源管理器】中依次展开【数据库】节点、触发器所在的【数据库】节点和【表】节点、【触发器】节点。(2)右键单击相应的触发器,弹出右键快捷菜单。(3)选择【禁用】命令,即可禁用选定的触发器;选择【启用】命令,即可恢复触发器为活动应用状态;选
41、择【删除】命令,即刻删除所选的触发器。10.3案例应用【提示】在各题案例中,在创建存储过程或触发器之前,可以先使用如下代码检测是否已存在该对象,如果存在则先删除再创建,这里各题案例都是假设之前不存在的情况。删除语法如下:if exists(select name from sysobjects where name = 对象名and type = 类型)drop proceduretrigger 对象名对象名:创建的存储过程名或触发器名;类型:存储过程是p,触发器是tr。一、存储过程综合案例【案例10-19】在stu数据库中,创建一个加密的存储过程sc_xs,通过该存储过程查询选修课成绩都及格
42、的学生的信息。use stugocreate proc sc_xswith encryptionasselect *from student where s_num not in /*成绩及格的学生*/(select s_num from stucourse where sc_grade <60) /*子查询中是成绩不资格的学号*/go执行以下代码,验证存储过程。 exec sc_xs /*执行该存储过程*/sp_helptext sc_xs /*验证存储过程定义文本是否加密*/【案例10-20】在stu数据库中,创建一存储过程infobyname,通过该存储过程,当输入学生姓名(如“张
43、然”)时,如果该生存在即可查询出该生的基本信息,经检测判断不存在该学生姓名,显示“对不起,你输入的学生姓名不存在,请重新核对再输入!”的提示性信息。use stugocreate procedure infobyname name char(10)asif (select count(*) from student where s_name = name)>0 beginselect * from studentwhere s_name = nameendelseprint '对不起,你输入的学生姓名不存在,请重新核对再输入!'【案例10-21】在stu数据库中,创建一个存储过程stu_xscj,当输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国异形底盘行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国幼儿园露天游乐设备市场运营状况与投资潜力研究报告
- 2025年女装模特项目可行性研究报告
- 2025-2030中国妊娠试验行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国女式衬衫行业供需趋势及投资风险研究报告
- 2025-2030中国在线电影行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国回收棉行业发展趋势与前景展望战略研究报告
- 2025-2030中国啤酒罐装机市场经营动态与未来销售前景研究报告
- 2025-2030中国台式灌肠机市场发展分析及市场趋势与投资方向研究报告
- 2025-2030中国原发性免疫缺陷病的治疗行业市场发展趋势与前景展望战略分析研究报告
- 2025年热电厂面试题及答案
- 春季中医药养生保健知识讲座课件
- 2025年淮南职业技术学院单招职业适应性测试题库及参考答案
- 2025年新人教版八年级下册物理全册教案
- 2024CSCO免疫检查点抑制剂相关的毒性管理指南
- 2024年河南水利与环境职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 《情志护理与养生》课件
- 植保无人机飞行作业服务应急及突发事件处理方案
- 2019地质灾害深部位移监测技术规程
- 智慧能源信息化平台建设整体解决方案
- 2024年税务系统职业技能竞赛试题库-社会保险费管理
评论
0/150
提交评论