SQLServer2005数据库应用技术第09章销售管理数据库中存储过程的应用SQLServer2005数据库应用技术技能目标理解存储过程概念以及存储过程的作用;学会创建、删除、修改存储过程;学会根据实际需要设计销售管理数据库中的存储过程。SQLServer2005数据库应用技术知识目标理解存储过程的作用;了解系统存储过程和扩展存储过程;掌握存储过程的基本类型;掌握创建、删除、修改和加密存储过程;掌握执行各类存储过程SQLServer2005数据库应用技术存储过程的概念存储过程(StoredProcedure)是一组完成特定功能的Transact-SQL语句集,经编译后存储在数据库中,用户调用过程名和给出参数来调用它们.特点:完成特定功能多条语句组成的程序存放在数据库中(服务器)由客户机调用可以带参数,也可以不带参数可以有返回值,也可以没有SQLServer2005数据库应用技术为什么要建立存储过程?数据库服务器客户机实现相同功能的SQL语句集客户机实现相同功能的SQL语句集缺点:1.相同的SQL语句要重复书写2.传输网络面临较大压力3.执行效率低4.存在安全隐患SQLServer2005数据库应用技术为什么要建立存储过程?数据库服务器存储过程客户机调用存储过程实现特定功能客户机优点:1.直接调用特定存储过程实现某种功能,不需要用户自己书写SQL语句2.存储过程存放在服务器上,不需网络传输3.存储过程经过编译和优化,执行效率高4.安全性高调用存储过程实现特定功能SQLServer2005数据库应用技术存储过程的优点允许模块化程序设计存储过程由有数据库专长的技术人员编写。可以无限次调用存储过程独立与程序源代码,维护方便执行速度快存储过程经过编译存储过程经过优化批处理的SQL语句每次均需要编译和优化有效降低网络流量只需通过网络发送一条调用存储过程的语句,不需要传递大量的SQL语句代码提高数据库的安全性存储过程具有安全性和所有权连接存储过程可以附加安全证书SQLServer2005数据库应用技术存储过程的分类系统存储过程用户自定义存储过程扩展存储过程SQLServer2005数据库应用技术存储过程的分类(续)系统存储过程完成SQLServer2005的许多过来活动以sp_开头物理上存储在数据库的resource中,逻辑上存在在每个数据库的SYS框架中SQLServer2005数据库应用技术存储过程的分类(续)用户自定义存储过程用户自定义存储过程是指封装的由用户创建、能完成特定功能的、可重用代码的模块或例程。扩展存储过程扩展存储过程是指使用编程语言(例如C)创建自己的外部例程,是指MicrosoftSQLServer的实例可以动态加载和运行的DLL。SQLServer2005数据库应用技术存储过程语法格式语法格式:CREATE[PROC|PROCEDURE]存储过程名[{@参数名称参数数据类型}[=参数的默认值][OUTPUT]][,...n][WITHENCRYPTION][WITHRECOMPILE]ASsql_statement参数:@参数名称:存储过程可以没有参数。也可以声明一个或多个参数,参数名称必须@作为第一个字符。参数后面带OUTPUT,表示为输出参数。WITHENCRYPTION:对存储过程加密,其他用户无法查看存储过程的定义。WITHRECOMPILE:每次执行该存储过程都重新进行编译。sql_statemen:该存储过程中定义的编程语句。SQLServer2005数据库应用技术存储过程的组成存储过程的定义中包含如下的两个主要组成部分。(1)过程名称及其参数的说明:包括所有的输入参数以及传给调用者的输出参数。(2)过程的主体:也称为过程体,针对数据库的操作语句(Transact-SQL语句),包括调用其它存储过程的语句。SQLServer2005数据库应用技术不带参数的存储过程创建不带参数的存储过程语法格式:CREATE[PROC|PROCEDURE]存储过程名[WITHENCRYPTION][WITHRECOMPILE]ASsql_statementSQLServer2005数据库应用技术不带参数的存储过程【例9.1】创建一个名为Cu_information的存储过程,用于查询客户的信息。usestudentCREATEPROCEDURECu_informationASSELECT*FROMCustomerSQLServer2005数据库应用技术不带参数的存储过程(续)执行不带参数的存储过程语法结构如下:EXEC存储过程名【例9.3】执行创建的Cu_Information存储过程。EXECCu_InformationSQLServer2005数据库应用技术创建存储过程的步骤实现过程体的功能构建实现特定功能的SQL语句创建存储过程CREATEPROCEDUREASSQL语句集验证准确性EXEC存储过程名SQLServer2005数据库应用技术带输入参数的存储过程创建带输入参数的存储过程CREATE[PROC|PROCEDURE]存储过程名[{@参数名称参数数据类型}[=参数的默认值][,...n][WITHENCRYPTION][WITHRECOMPILE]ASsql_statementSQLServer2005数据库应用技术带输入参数的存储过程【例9.4】创建一个存储过程,实现根据订单号获取该订单的信息的功能。CREATEPROCEDUREOrderDetail@OrderIDINTASSELECT*FROMSell_OrderWHERESellOrderId=@OrderIDSQLServer2005数据库应用技术带输入参数的存储过程【例9.6】创建名为listEmployee的存储过程,其功能为:在员工表employee中查找符合性别和超过指定工资条件的员工详细信息。CREATEPROCEDURElistEmployee@sexvarchar(2),@salarymoneyASSELECT*FROMemployeeWHEREsex=@sexandsalary@salarySQLServer2005数据库应用技术带输入参数的存储过程(续)执行输入参数的存储过程两种方法:使用参数名传递参数值EXEC存储过程名[@参数名=参数值][DEFAULT][,…n]按位置传递参数值EXEC存储过程名[参数值1,参数值2,…]SQLServer2005数据库应用技术带输入参数的存储过程(续)【例9.7】使用【例9.5】中创建的存储过程customer_order,获取“三川实业有限公司”的信息,包括联系人姓名、联系方式以及该公司订购产品的明细表。代码如下:EXECcustomer_order@customername='三川实业有限公司'SQLServer2005数据库应用技术带输入参数的存储过程(续)【例9.8】利用存储过程listEmployee,查找工资超过4000元的的男员工和工资超过3000元女员工的详细信息。代码如下:EXEClistEmployee@sex='男',@salary=4000EXEClistEmployee@salary=3500,@sex='女'SQLServer2005数据库应用技术带输入参数的存储过程(续)【例9.9】按位置传递执行存储过程listEmployee,查找工资超过4000元的的男员工和工资超过3000元女员工的详细信息。代码如下:EXEClistEmployee'男',4000EXEClistEmployee'女',3500SQLServer2005数据库应用技术带输入参数的存储过程(续)【例9.11】利用Name_Employee存储过程查询所有员工信息和姓王的员工信息EXECName_Employee查询所有员工信息EXECName_Employee‘王%’查询姓王的员工信息SQLServer2005数据库应用技术带输出参数的存储过程【例9.12】创建带返回参数的存储过程求两个整数的和。代码如下:CREATEPROCEDUREPRO_SUM@N1INT,@N2INT,@RESULTINTOUTPUTASSET@RESULT=@N1+@N2SQLServer2005数据库应用技术带输出参数的存储过程【例9.13】执行【例9.11】创建的PRO_SUM存储过程。代码如下:DECLARE@ANSWERINTEXECPRO_SUM20,69,@ANSWEROUTPUTselect@ANSWER'结果'SQLServer2005数据库应用技术查看存储过程sp_help用于显示存储过程的参数及其数据类型,语法格式如下:sp_help[[@objname=]存储过程名]sp_helptext用于显示存储过程的源代码,语法格式如下:sp_helptext[[@objname=]存储过程]SQLServer2005数据库应用技术查看存储过程【例9.14】查看customer_order存储过程的参数和数据类型。代码如下:USECompanySalesGOsp_helpcustomer_orderSQLServer2005数据库应用技术查看存储过程【例9.15】查看customer_order存储过程的源代码。代码如下:USECompanySalesGOsp_helptextcustomer_orderSQLServer2005数据库应用技术删除用户存储过程删除用户存储过程可以使用DROP命令,语法格式如下:DROP{PROC|PROCEDURE}存储过程名[,...n]SQLServer2005数据库应用技术删除用户存储过程【例9.16】删除PRO_SUM存储过程。代码如下:USECompanySalesGODROPPROCEDUREPRO_SUMSQLServer2005数据库应用技术修改存储过程ALTERPROCEDURE语句的语法格式如下:ALTER[PROC|PROCEDURE]存储过程名[{@参数名称参数数据类型}[=参数的默认值][OUTPUT]][,...n][WITHENCRYPTION][WITHRECOMPILE]ASsql_statementSQLServer2005数据库应用技术系统存储过程常用系统存储过程:sp_tables:返回可在当前环境中查询的对象列表。这代表可在FROM子句中出现的任何对象。sp_stored_procedures:返回当前环境中的存储过程列表。sp_rename:在当前数据库中更改用户创建对象的名称。此对象可以是表、索引、列、别名数据类型。sp_renamedb:更改数据库的名称。系统存储过程sp_help:报告有关数据库对象(sys.sysobjects兼容视图中列出的所有对象)、用户定义数据类型或SQLServer2005提供的数据类型的信息。sp_helptext:是用户定义规则的定义、默认值、未加密的Transact-SQL存储过程、用户定义Transact-SQL函数、触发器、计算列、CHECK约束、视图或系统对象(如系统存储过程)。sp_who:提供有关MicrosoftSQLServerDatabaseEngine实例中的当前用户和进程的信息。sp_password:为MicrosoftSQLServer登录名添加或更改密码。SQLServer2005数据库应用技术扩展存储过程使用外部语言编写的外部存储过程,如C语言,通常以动态链接库DLL形式出现,扩展SQLServer2005功能一般以xp_开头xp_cmdshell:用来运行从命令行执行的程序Xp_sscanf:将数据从字符串读入时每个格式参数所指定的参数位置Xp_sprintfSQLServer2005数据库应用技术创建存储过程需要考虑的因素:(1)一个存储过程完成一个任务。(2)不要使