- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第6章存储过程、触发器
和数据完整性6.1存储过程6.2触发器6.3数据完整性
6.1存储过程客户/服务器数据库与传统的数据库结构的一个很重要的区别是,在传统的数据库中只存放数据,所有的应用程序都在用户端,都与用户实际运行的应用程序捆绑在一起;而在客户/服务器结构的数据库中,在数据库中还可以存放程序,即存储过程。
基本概念01存储过程是事先编好的、存储在数据库中的程序,这些程序用来完成对数据库的指定操作。02
系统存储过程SQLServer本身提供了一些存储过程,用于管理SQLServer和显示有关数据库和用户的信息,我们称之为系统存储过程。用户存储过程用户也可以编写自己的存储过程,并把它存放在数据库中。这样安排的主要目的就是要充分发挥数据库服务器的功能,尽量减少网络上的堵塞。
客户端应用(不使用存储过程).Starttransaction.INSERTdataUPDATEdataDELETEdataEndtransaction.DBMSServer客户端应用(使用存储过程).Starttransaction.CallStoredprocedureEndtransaction.DBMSServerProcedure:INSERTdataUPDATEdataDELETEdata不使用存储过程时,所有的数据处理都在客户端完成;而使用存储过程时,可以使数据处理在服务器端完成。
创建存储过程CREATEPROC[edure]procedure_name[;number][@parameterdata_type[=default],…?]ASsql_statements???procedure_name:给出存储过程名;s???number:对同名的存储过程指定一个序号;s???@parameter:给出参数名;s???data_type:指出参数的数据类型;s???=default:给出参数的默认值;s???sql_statement:存储过程所要执行的SQL语句,它可以是一组SQL语句,可以包含流程控制语句等。
例:创建一个最简单的存储过程:CREATEPROCeduresp_getemp;1ASSELECT*FROM职工
例:带参数的存储过程:01CREATEPROCeduresp_getemp;2(@salaryint)ASSELECT*FROM职工WHERE工资@salary02
存储过程一般用来完成数据查询和数据处理操作,所以在存储过程中不可以使用创建数据库对象的语句,即在存储过程中一般不能含有以下语句:CREATETABLECREATEVIEWCREATEDEFAULTCREATERULECREATETRIGGERCREATEPROCEDURE
[EXECute]01[@返回状态码=]01存储过程名[[@参数=]{值|@变量}…]01执行存储过程
例:执行带参数的sp_getemp;2存储过程executesp_getemp;21240
存储过程的返回值和状态信息无论什么时候执行存储过程,总要返回一个结果码,用以指示存储过程的执行状态。如果存储过程执行成功,返回的结果码是0;如果存储过程执行失败,返回的结果码一般是一个负数,它和失败的类型有关。我们在创建存储过程时,也可以定义自己的状态码和错误信息。
CREATEPROCeduresp_getemp;3(@salaryint=NULL)ASIF@salaryISNULLBEGINPRINT必须提供一个数值作参数!RETURN13ENDIFNOTEXISTS(SELECT*FROM职工WHERE工资@salary)BEGINPRINT没有满足条件的记录!RETURN-103ENDSELECT*FROM职工WHERE工资@salaryRETURN0例:带参数和返回状态值的存储过程。
例:执行以上存储过程。DECLARE@statusintEXECUTE@status=sp_getemp;31200print@status
0102修改存储过程的语句是(一般格式):DROPPROC[edure]procedure_name注意:删除存储过程的语句中不能指定序号。也就是说,该语句将同时删除同名的所有存储过程。ALTERPROC[edure]procedure_name[;number][@parameterdata_type[=default],…?]
文档评论(0)