SQL-Server-2012数据库开发教程第8章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《SQL-Server-2012数据库开发教程第8章.ppt》由会员分享,可在线阅读,更多相关《SQL-Server-2012数据库开发教程第8章.ppt(97页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SQLServer2012SQLServer2012数据库开发教程数据库开发教程数据库开发教程数据库开发教程(第(第(第(第33版)版)版)版)授课教师:授课教师:职务:职务:第第8章章存储过程、函数和触发器存储过程、函数和触发器课程描述课程描述课程描述课程描述存储过程、函数和触发存储过程、函数和触发存储过程、函数和触发存储过程、函数和触发器实际上都是使用器实际上都是使用器实际上都是使用器实际上都是使用Transact-SQLTransact-SQLTransact-SQLTransact-SQL语言编写语言编写语言编写语言编写的程序。存储过程和函的程序。存储过程和函的程序。存储过程和函的程序
2、。存储过程和函数需要显式调用才能执数需要显式调用才能执数需要显式调用才能执数需要显式调用才能执行,而触发器则在满足行,而触发器则在满足行,而触发器则在满足行,而触发器则在满足指定条件时自动执行。指定条件时自动执行。指定条件时自动执行。指定条件时自动执行。了解它们的工作原理是了解它们的工作原理是了解它们的工作原理是了解它们的工作原理是编写存储过程、函数和编写存储过程、函数和编写存储过程、函数和编写存储过程、函数和触发器的前提。触发器的前提。触发器的前提。触发器的前提。本章知识点本章知识点8.1 8.1 存储过程存储过程 8.2 8.2 用户定义函数用户定义函数 8.3 8.3 触发器触发器 8.
3、1存储过程存储过程8.1.1 8.1.1 什么是存储过程什么是存储过程 8.1.2 8.1.2 创建存储过程创建存储过程 8.1.3 8.1.3 执行不带参数的存储过程执行不带参数的存储过程 8.1.4 带参数的存储过程8.1.5 8.1.5 存储过程的返回值存储过程的返回值 8.1.6 8.1.6 获取存储过程信息获取存储过程信息 8.1.7 8.1.7 修改和重命名存储过程修改和重命名存储过程 8.1.8 8.1.8 删除存储过程删除存储过程 8.1.9 8.1.9 系统存储过程系统存储过程 8.1.1什么是存储过程什么是存储过程p存储过程是存储过程是Transact-SQLTransac
4、t-SQL语句的预编译集语句的预编译集合,这些语句在一个名称下存储并作为一合,这些语句在一个名称下存储并作为一个单元进行处理。个单元进行处理。SQL ServerSQL Server提供了一系提供了一系列存储过程以管理列存储过程以管理SQL ServerSQL Server、显示有关、显示有关数据库和用户的信息。数据库和用户的信息。SQL ServerSQL Server提供的提供的存储过程称为系统存储过程。存储过程称为系统存储过程。p存储过程由参数、编程语句和返回值组成。存储过程由参数、编程语句和返回值组成。可以通过输入参数向存储过程中传递参数可以通过输入参数向存储过程中传递参数值,也可以通
5、过输出参数向调用者传递多值,也可以通过输出参数向调用者传递多个输出值;个输出值;使用使用SQLServer中的存储过程的优势中的存储过程的优势1 1允许模块化程序设计允许模块化程序设计 2 2允许更快执行允许更快执行3 3减少网络流量减少网络流量4 4可作为安全机制使用可作为安全机制使用 8.1.2创建存储过程创建存储过程1 1使用使用CREATE PROCEDURECREATE PROCEDURE语句语句2 2使使用用SQL SQL Server Server Management Management StudioStudio中中的菜单命令的菜单命令1使用使用CREATEPROCEDURE
6、语句语句pCREATE PROCEDURECREATE PROCEDURE语句的作用是创建存语句的作用是创建存储过程,它的语法结构如下:储过程,它的语法结构如下:CREATE PROC EDURE CREATE PROC EDURE 存储过程名存储过程名 parameter data_type parameter data_type VARYING =default VARYING =default OUTPUT OUTPUT AS SQLAS SQL语句语句 .n .n 参数说明参数说明(1)p存储过程的名称必须符合标识符规则,而且对于数据库存储过程的名称必须符合标识符规则,而且对于数据库及
7、其所有者必须是唯一的。如果要创建局部临时过程,可及其所有者必须是唯一的。如果要创建局部临时过程,可以在存储过程名前面加一个编号符(以在存储过程名前面加一个编号符(#procedure_nameprocedure_name),),如果要创建全局临时过程,可以在存储过程名前面加两个如果要创建全局临时过程,可以在存储过程名前面加两个编号符(编号符(#procedure_nameprocedure_name)。完整的名称(包括)。完整的名称(包括#或或#)不能超过)不能超过128128个字符。指定过程所有者的名称是可选的。个字符。指定过程所有者的名称是可选的。p parameteparamete表示过
8、程中的参数。在表示过程中的参数。在CREATE PROCEDURECREATE PROCEDURE语句语句中可以声明一个或多个参数。用户必须在执行过程时提供中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。使每个所声明参数的值(除非定义了该参数的默认值)。使用用 符号作为第一个字符来指定参数名称。参数名称必须符符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其他过程中。在默认情况下,参数同的参数名称可以用在其他过程中。在默认情况
9、下,参数只能代替常量,而不能用于代替表名、列名或其他数据库只能代替常量,而不能用于代替表名、列名或其他数据库对象的名称。对象的名称。参数说明参数说明(2)pdata_typedata_type表示参数的数据类型。所有数据类型表示参数的数据类型。所有数据类型(包括(包括texttext、ntextntext和和imageimage)都可以用作存储过)都可以用作存储过程的参数。程的参数。pVARYINGVARYING指定作为输出参数支持的结果集,仅适指定作为输出参数支持的结果集,仅适用于游标参数。用于游标参数。pdefaultdefault指定参数的默认值。如果定义了默认值,指定参数的默认值。如果
10、定义了默认值,不必指定该参数的值即可执行过程。默认值必须不必指定该参数的值即可执行过程。默认值必须是常量或是常量或NULLNULL。如果过程中对该参数使用。如果过程中对该参数使用LIKELIKE关关键字,那么默认值中可以包含通配符(键字,那么默认值中可以包含通配符(%、_ _、和和)。)。pOUTPUTOUTPUT表明参数是返回参数。使用表明参数是返回参数。使用OUTPUTOUTPUT参数可参数可将信息返回给调用过程。将信息返回给调用过程。TextText、ntextntext和和imageimage参参数可用作数可用作OUTPUTOUTPUT参数。参数。pASAS关键字指定过程要执行的操作。
11、关键字指定过程要执行的操作。p过程中可以包含的任意数目和类型的过程中可以包含的任意数目和类型的Transact-Transact-SQLSQL语句语句【例例8-1】p创建存储过程创建存储过程IncreaseWageIncreaseWage,功能是将表,功能是将表EmployeesEmployees中所有员工的工资数据增加中所有员工的工资数据增加10%10%,具体语句如下:具体语句如下:USE HrSystemUSE HrSystemGOGOCREATE PROCEDURE IncreaseWageCREATE PROCEDURE IncreaseWageASASUPDATE Employees
12、 SET Wage=Wage*1.1UPDATE Employees SET Wage=Wage*1.1GOGO【例例8.2】p为了进一步增强存储过程的可用性,在为了进一步增强存储过程的可用性,在【例例8.18.1】的基的基础上添加参数信息。由用户通过参数动态地设置工资增础上添加参数信息。由用户通过参数动态地设置工资增长的比例。示例代码如下:长的比例。示例代码如下:USE HrSystemUSE HrSystemGOGOCREATE PROCEDURE IncreaseWage1CREATE PROCEDURE IncreaseWage1IncRate SMALLINTIncRate SMAL
13、LINTASASUPDATE Employees SET Wage=Wage*(1+IncRate/UPDATE Employees SET Wage=Wage*(1+IncRate/100)100)GOGOp与与IncreaseWageIncreaseWage相比,此存储过程多了一个参数相比,此存储过程多了一个参数IncRateIncRate。在调用。在调用IncreaseWage1IncreaseWage1时,可以将需要上调时,可以将需要上调工资的比例通过参数告知存储过程,存储过程再根据参工资的比例通过参数告知存储过程,存储过程再根据参数动态调整工资数额。数动态调整工资数额。2使用使用SQ
14、LServerManagementStudio中中的菜单命令的菜单命令p在在SQL Server SQL Server Management Management StudioStudio中,展开中,展开要创建存储过程要创建存储过程的数据库,例如的数据库,例如HrSystemHrSystem。右击。右击“可编程性可编程性”下下面的面的“存储过程存储过程”项,在弹出菜项,在弹出菜单中选择单中选择“新建新建存储过程存储过程”命令,命令,打开新建存储过打开新建存储过程页面,如图程页面,如图8-8-1 1所示。所示。8.1.3执行不带参数的存储过程执行不带参数的存储过程p使用使用Transact-SQ
15、LTransact-SQL语言的语言的EXCUTEEXCUTE语句可以执行存储过程。语句可以执行存储过程。p【例例8-38-3】执行存储过程执行存储过程IncreaseWageIncreaseWage的命令如下:的命令如下:USE HrSystemUSE HrSystemGOGOEXEC IncreaseWageEXEC IncreaseWageGOGOp运行结果为:运行结果为:(所影响的行数为(所影响的行数为 9 9行)行)p读者可以在读者可以在SQL Server Management StudioSQL Server Management Studio中,查看表中,查看表Employee
16、sEmployees的变化,检验存储过程的变化,检验存储过程WageIncreaseWageIncrease的执行的执行情况。情况。8.1.4带参数的存储过程带参数的存储过程p在定义存储过程时,可以同时指定参数,在定义存储过程时,可以同时指定参数,格式如下:格式如下:参数名参数名 数据类型数据类型 =默认值默认值 OUTPUT,OUTPUT,.n.np如果参数后面使用如果参数后面使用OUTPUTOUTPUT关键字,则表明关键字,则表明它是输出参数。它是输出参数。【例例8-4】p创建存储过程创建存储过程add_procadd_proc,实现计算两个参数之和并将其,实现计算两个参数之和并将其输出的
17、功能,具体语句如下:输出的功能,具体语句如下:CREATE PROCEDURE add_procCREATE PROCEDURE add_procnum1 INT=0,num1 INT=0,num2 INT=0num2 INT=0ASASDECLARE num3 INTDECLARE num3 INTSET num3=num1+num2SET num3=num1+num2PRINT num3PRINT num3p存储过程存储过程add_procadd_proc定义了两个参数定义了两个参数num1num1和和num2num2,它们,它们都是输入参数,参数类型为都是输入参数,参数类型为INTINT
18、,默认值为,默认值为0 0。【例例8-4】p在在SQL Server Management StudioSQL Server Management Studio中运行上面的命令,中运行上面的命令,创建存储过程创建存储过程add_procadd_proc,并执行如下命令,运行存储过,并执行如下命令,运行存储过程:程:EXEC add_procEXEC add_procGOGOp运行结果为运行结果为0 0。因为在执行存储过程时没有带参数,所。因为在执行存储过程时没有带参数,所以两个参数的值都被设置为默认值以两个参数的值都被设置为默认值0 0,它们的和等于,它们的和等于0 0。p在运行存储过程时使用
19、参照在运行存储过程时使用参照1313和和2525,代码如下:,代码如下:EXEC add_proc 13,25EXEC add_proc 13,25GOGO运行结果为运行结果为3838。【例例8-5】p看一个使用输出参数的例子。创建存储过程看一个使用输出参数的例子。创建存储过程add_proc1add_proc1,它的功能,它的功能是计算两个参数之和,并将结果使用输出参数返回,具体语句如是计算两个参数之和,并将结果使用输出参数返回,具体语句如下:下:CREATE PROCEDURE add_proc1CREATE PROCEDURE add_proc1num1 INT=0,num1 INT=0
20、,num2 INT=0,num2 INT=0,num3 INT OUTPUTnum3 INT OUTPUTASASSET num3=num1+num2SET num3=num1+num2p在在SQL Server Management StudioSQL Server Management Studio中执行如下代码,可以将存储中执行如下代码,可以将存储过程过程add_proc1add_proc1的输出参数值保存到的输出参数值保存到numnum变量中。变量中。DECLARE num AS INTDECLARE num AS INTEXEC add_proc1 12,23,num OUTPUTE
21、XEC add_proc1 12,23,num OUTPUTPRINT numPRINT nump运行结果为运行结果为3838。【例例8-6】p创建存储过程创建存储过程AvgWageAvgWage,它的功能是根据给定的部门名称计算平均工资,并将结果,它的功能是根据给定的部门名称计算平均工资,并将结果使用输出参数返回,具体语句如下:使用输出参数返回,具体语句如下:CREATE PROCEDURE AvgWageCREATE PROCEDURE AvgWagedepname varchar(100),depname varchar(100),wage float OUTPUTwage float
22、OUTPUTASASDECLARE depid intDECLARE depid intSET depid=0SET depid=0-根据参数中指定的部门名称根据参数中指定的部门名称depname,depname,获取部门编号获取部门编号SELECT depid=Dep_Id FROM Departments WHERE Dep_Name=depnameSELECT depid=Dep_Id FROM Departments WHERE Dep_Name=depnameIF depid=0IF depid=0 BEGIN BEGIN SET wage=0 SET wage=0 PRINT PR
23、INT 指定的部门记录不存在指定的部门记录不存在 END ENDELSEELSE BEGIN BEGIN SELECT wage=AVG(Wage)FROM EmployeesSELECT wage=AVG(Wage)FROM Employees WHERE Dep_Id=depid WHERE Dep_Id=depid GROUP BY Dep_Id GROUP BY Dep_Id END ENDGOGO 【例例8-6】p执行如下代码,可以将存储过程执行如下代码,可以将存储过程AvgWageAvgWage的输出参数值(即办公室的平均工资)保的输出参数值(即办公室的平均工资)保存到存到wage
24、wage变量中,并打印平均工资数据。变量中,并打印平均工资数据。DECLARE wage floatDECLARE wage floatEXEC AvgWage EXEC AvgWage 办公室办公室,wage OUTPUT,wage OUTPUTPRINT wagePRINT wage8.1.5存储过程的返回值存储过程的返回值p可以在存储过程中使用可以在存储过程中使用RETURNRETURN语句返回一语句返回一个状态值,返回值只能是整数。个状态值,返回值只能是整数。【例例8-7】p创建存储过程创建存储过程AvgWage1AvgWage1,它的功能是根据给定的部门名称计算平均工资,它的功能是根
25、据给定的部门名称计算平均工资,并将结果使用输出参数返回。如果指定的部门存在,则返回并将结果使用输出参数返回。如果指定的部门存在,则返回1 1;否则返回;否则返回0 0。具体语句如下:具体语句如下:USE HrSystemUSE HrSystemGOGOCREATE PROCEDURE AvgWage1CREATE PROCEDURE AvgWage1depname varchar(100),depname varchar(100),wage float OUTPUTwage float OUTPUTASASDECLARE depid intDECLARE depid intSET depid=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 2012 数据库 开发 教程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内