09-存储过程和函数课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《09-存储过程和函数课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 09 存储 过程 函数 课件
- 资源描述:
-
1、 批处理:批处理:有助于减少网络堵塞有助于减少网络堵塞(network traffic)多个命令一起被提交和执行多个命令一起被提交和执行 批处理批处理(batch)是一组一起提交给是一组一起提交给SQL Server执执行的行的SQL语句语句 在结尾使用在结尾使用GO命令以发送命令以发送SQL语句到一个语句到一个SQL Server实例实例 当编译器读取到当编译器读取到GO语句时,会把语句时,会把GO前面的语前面的语句当成一个批处理,并把这些语句打包发送给句当成一个批处理,并把这些语句打包发送给服务器。服务器。特点:批一次性的发送到特点:批一次性的发送到SQL SERVER服务器服务器执行,服
2、务器将批处理语句编译成一个可执行执行,服务器将批处理语句编译成一个可执行单元,这种单元称为单元,这种单元称为执行计划执行计划(execution plan)举例举例创建批处理创建批处理 说明:说明:如果批处理中出现任何编译错误如果批处理中出现任何编译错误(compilation error),导致执行计划无法编,导致执行计划无法编译,从而批处理中的任何语句都无法执行。译,从而批处理中的任何语句都无法执行。如果编译完成,在运行中出错,如果编译完成,在运行中出错,(run-time error)则执行停止,出错之前执行的语句则执行停止,出错之前执行的语句不受影响。不受影响。变量变量 使用变量存储值
3、使用变量存储值 输入数据,中间值,最后结果输入数据,中间值,最后结果 使用使用PRINT语句显示用户定义的消息和变量语句显示用户定义的消息和变量的值的值 如果变量不是字符串类型,要通过如果变量不是字符串类型,要通过convert函数进函数进行转换行转换 变量类型:变量类型:全局变量全局变量(Global variables)记录服务器的活动状态记录服务器的活动状态 是事先定义好的变量,不能由用户参与定义,是事先定义好的变量,不能由用户参与定义,只读只读 用用标记标记 (举例)举例)创建局部变量创建局部变量 DECLARE variable_name data_type DECLARE MyCo
4、unter int 多个变量,用,隔开多个变量,用,隔开 DECLARE LastName nvarchar(30),FirstName nvarchar(20),State nchar(2)变量的作用域从声明变量的地方开始到声明变变量的作用域从声明变量的地方开始到声明变量的批处理或存储过程的结尾。量的批处理或存储过程的结尾。创建局部变量创建局部变量 第一次声明变量时,其值设置为第一次声明变量时,其值设置为 NULL 赋值的方法:赋值的方法:SET 语句语句 SET avgscore=60.0 SELECT 语句的选择列表中当前所引用值为语句的选择列表中当前所引用值为变量赋值变量赋值 为局部变
5、量赋值为局部变量赋值 多行注释多行注释 /*.*/单行注释单行注释 -注释注释 以下规则适用于批处理:以下规则适用于批处理:CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和和 CREATE VIEW 语句不能在批处理中与其他语句组合语句不能在批处理中与其他语句组合使用。批处理必须以使用。批处理必须以 CREATE 语句开始。所有跟在该批语句开始。所有跟在该批处理后的其他语句将被解释为第一个处理后的其他语句将被解释为第一个 CREATE 语句定义语句定义的一部分。的一部分。不能在同一个批处理中
6、更改表,然后引用新列。不能在同一个批处理中更改表,然后引用新列。如果如果 EXECUTE 语句是批处理中的第一句,则不需要语句是批处理中的第一句,则不需要 EXECUTE 关键字。如果关键字。如果 EXECUTE 语句不是批处理中语句不是批处理中的第一条语句,则需要的第一条语句,则需要 EXECUTE 关键字。关键字。创建批处理的指导方针创建批处理的指导方针课间思考课间思考下面哪个语句可以被用在批处理中下面哪个语句可以被用在批处理中?1.CREATE FUNCTION 2.CREATE RULE 3.DECLARE答案:答案:3.DECLARE 允许你使用下面的结构来控制语句的流程:允许你使用
7、下面的结构来控制语句的流程:IFELSE 语句语句 CASE 语句语句 WHILE 语句语句程序块语句程序块语句 语法:语法:BEGIN sql_statement|statement_block END 在处理时,整个语句块看作是一条在处理时,整个语句块看作是一条SQL语句。语句。程序块语句程序块语句Begin.end IFELSE 语句:语句:基于布尔表达式的结果执行特定的操作基于布尔表达式的结果执行特定的操作 语法:语法:IF boolean_expression sql_statement|statement_block ELSE boolean_expression sql_stat
8、ement|statement_block让我们看看如何让我们看看如何使用结构(续)使用结构(续)CASE 语句:语句:评估条件的一个列表并且返回可能结果中的一个评估条件的一个列表并且返回可能结果中的一个 语法:语法:CASE WHEN boolean_expression THEN expressionWHEN boolean_expression THEN expression.ELSE expressionEND让我们看看如何让我们看看如何使用结构(续)使用结构(续)WHILE 语句:语句:重复执行只要给定的条件为真重复执行只要给定的条件为真 使用使用BREAK 和和 CONTINUE语
9、句来控制语句来控制WHILE循环中的语句循环中的语句 语法:语法:WHILE boolean_expression sql_statement|statement_blockBREAKsql_statement|statement_blockCONTINUEBREAK 导致从导致从WHILE 循环中退出。将执行出现在循环中退出。将执行出现在 END 关键字关键字(循环结束的标记)后面的任何语句。(循环结束的标记)后面的任何语句。CONTINUE 使使 WHILE 循环重新开始执行,忽略循环重新开始执行,忽略 CONTINUE 关键字关键字后面的任何语句。后面的任何语句。使用结构(续)使用结构(
10、续)SQL Server 中的错误可以用以下两种方式处理:中的错误可以用以下两种方式处理:使用使用TRY-CATCH 结构结构 使用使用RAISERROR语句语句处理错误和异常处理错误和异常在以下情形下使用在以下情形下使用TRY-CATCH 结构:结构:Try 块包含一组块包含一组T-SQL语句。如果语句。如果TRY块的语句中发块的语句中发生任何错误,控制将传递给生任何错误,控制将传递给CATCH块。块。CATCH块包含另外一组语句,这些语句在错误发生块包含另外一组语句,这些语句在错误发生时执行。时执行。BEGIN TRY sql_statement|statement_block END T
11、RY BEGIN CATCH sql_statement|statement_block END CATCH ;TRY-CATCH在以前的版本中是没有的。在以前的版本中是没有的。处理错误和异常(续)处理错误和异常(续)在在CATCH块中,可以使用以下的系统函数来确块中,可以使用以下的系统函数来确定关于错误的信息:定关于错误的信息:ERROR_NUMBER()返回错误号。返回错误号。ERROR_MESSAGE()返回错误消息的完整文本。此返回错误消息的完整文本。此文本包括为任何可替换参数(如长度、对象名称或时文本包括为任何可替换参数(如长度、对象名称或时间)提供的值。间)提供的值。ERROR_S
12、EVERITY()返回错误严重性。返回错误严重性。ERROR_STATE()返回错误状态号。返回错误状态号。ERROR_LINE()返回导致错误的例程中的行号。返回导致错误的例程中的行号。ERROR_PROCEDURE()返回出现错误的存储过程返回出现错误的存储过程或触发器的名称。或触发器的名称。处理错误和异常(续)处理错误和异常(续)RAISERROR:被用于返回消息到商业程序被用于返回消息到商业程序 使用与系统错误或数据库引擎产生的警告消息使用与系统错误或数据库引擎产生的警告消息相同的格式相同的格式 也可能返回用户定义的错误消息也可能返回用户定义的错误消息让我们看看如何让我们看看如何处理错
13、误和异常(续)处理错误和异常(续)错误由错误由master.dbo.sysmessages表维护。每表维护。每一个错误代码都有相应的级别和描述。一个错误代码都有相应的级别和描述。错误定义的级别从错误定义的级别从0到到25。20以上的错误代以上的错误代表重大错误,通常意味着该错误会导致存表重大错误,通常意味着该错误会导致存储进程立刻终止,并且所有的客户连接都储进程立刻终止,并且所有的客户连接都要重新初始化。要重新初始化。非关键性错误只是禁止掉当前运行的程序非关键性错误只是禁止掉当前运行的程序行,并继续执行。行,并继续执行。处理错误和异常(续)处理错误和异常(续)语法语法RAISERROR(msg
14、_id msg_str ,severity,state ,argument ,.n )WITH option ,.n 课间思考课间思考msg_id 定制消息的错误代码。定制消息的错误代码。.RAISERROR 接受任何大于接受任何大于13000的的数字数字,但是定制信息但是定制信息msg_id要大于等于要大于等于50000。msg_str 定制信息的文本。定制信息的文本。severity 定制信息的级别。从定制信息的级别。从 0 to 25,19-25 是重大错误代码。是重大错误代码。state 呈现导致错误的状态,不在呈现导致错误的状态,不在SQL内部使用。内部使用。argument 定义在
15、错误信息中的可以替换的值。定义在错误信息中的可以替换的值。WITH 有三个选项有三个选项:WITH LOG 纪录错误。只能用于级别高于纪录错误。只能用于级别高于19的错误。的错误。WITH NOWAIT 将错误立刻发送到客户端将错误立刻发送到客户端 WITH SETERROR sets ERROR to the value specified by msg_id,regardless of severity level.课间思考课间思考 哪个系统函数返回错误消息的文本当用在哪个系统函数返回错误消息的文本当用在CATCH块中的时候块中的时候?答案:答案:ERROR_MESSAGE()课间思考课间
16、思考 你如何在批处理中返回用户定义的错误消息你如何在批处理中返回用户定义的错误消息?答案:答案:使用使用RAISERROR语句语句 批处理是一系列一起提交到服务器执行的批处理是一系列一起提交到服务器执行的SQL语句。语句。你可以使用变量存储一个临时值。你可以使用变量存储一个临时值。你可以使用你可以使用PRINT语句来显示用户定义消息或屏幕上一语句来显示用户定义消息或屏幕上一个变量的内容。个变量的内容。你可以在批处理中使用注释实体给代码写注释。你可以在批处理中使用注释实体给代码写注释。你可以使用你可以使用IFELSE语句以条件执行语句以条件执行SQL语句。语句。CASE语句求一系列条件的值并且返
17、回各种可能结果中语句求一系列条件的值并且返回各种可能结果中的一个。的一个。你可以在批处理中使用你可以在批处理中使用WHILE语句以允许一系列语句以允许一系列T SQL语句重复执行只要给定条件为真。语句重复执行只要给定条件为真。BREAK语句导致从语句导致从WHILE循环中退出。循环中退出。小结(续)小结(续)小结(续)小结(续)CONTINUE语句导致语句导致WHILE循环重启,忽略循循环重启,忽略循环中环中CONTINUE语句后的任何语句。语句后的任何语句。在批处理中处理错误的两种方法是:在批处理中处理错误的两种方法是:TRY-CATCH 结构结构 RAISERROR 语句语句 存储过程:存
18、储过程:(stored procedurre)是数据库中保存的预编译的数据库对象是数据库中保存的预编译的数据库对象 批处理是临时的批处理是临时的 存储过程可以极大的减少网络需求存储过程可以极大的减少网络需求 系统存储过程:系统存储过程:sp_ 不要以不要以 sp_ 为前缀创建任何存储过程。为前缀创建任何存储过程。sp_ 前缀是前缀是 SQL Server 用来指定系统存储过用来指定系统存储过程的程的 存储过程存储过程 存储过程的优点:存储过程的优点:存储过程只在创造时进行编译,以后每次执行存储存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般过程都不需再重新编译,而一般S
19、QL语句每执行一次语句每执行一次就编译一次就编译一次,所以使用存储过程可提高数据库执行速所以使用存储过程可提高数据库执行速度。度。当对数据库进行复杂操作时当对数据库进行复杂操作时(如对多个表进行如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起存储过程封装起来与数据库提供的事务处理结合一起使用。使用。存储过程可以重复使用存储过程可以重复使用,可减少数据库开发人员的工可减少数据库开发人员的工作量作量 安全性高安全性高,可设定只有某此用户才具有对指定存储过可设定只有某此用户才具有对指定存储过程
展开阅读全文