第9章[3]ppt课件.ppt
第9章3第第9 9章章存储过程存储过程9.19.1 存储过程概述存储过程(Stored procedure)是在数据库服务器执行的一组T-SQL语句集合,经编译后存放在数据库服务器上。存储过程与其他编程语言类似。存储过程可以接受输入参数、输出参数,同时可以向调用它的应用程序返回操作结果和查询结果。如果操作失败,也可以返回失败的原因。同时存储过程包含执行数据库操作的SQL语句。 SQLServer提供了3种类型的存储过程:用户自定义存储过程:用户通过SQL语句创建的,封装了程序执行逻辑的,可重用的代码块。系统存储过程:在SQLServer中有许多的管理活动都是通过系统存储过程实现。例如,sys.sp_changedbowner就是系统存储过程。在数据库中系统存储过程保存在资源数据库中,带有“sp_”前缀。系统存储过程出现在每个系统定义数据库和用户定义数据的SYS架构中。当用户要创建存储过程的时候最好不要以“sp_”开头,因为当用户存储过程和系统存储过程重名时,会调用系统存储过程。扩展存储过程:SQLServer允许用户使用编程语言(如C或C#)等创建外部实例。扩展存储过程是指SQLServer可以动态加载和运行的DLL。9.29.2 存储过程的设计 学习创建存储过程之前我们需要了解,虽然几乎所有的SQL语句都可以包含在存储过程中,但仍有少量SQL语句,如果包含在存储过程中,会导致不兼容,甚至错误。大家需要明确记住这些不能包含在存储过程中的SQL语句9.2.1 创建存储过程基本语法 创建存储过程的方法和创建数据库中其它对象一样,通过SQL Server Management Studio和T-SQL的CREATE PROCEDURE语句来创建存储过程,存储过程的基本语法如下:CREATE PROCEDURE|PROC schema_name. Parameter type_schema_name.data_type =DEFAULT OUT|OUTPUT READONLY ,n WITH ,nAS ;n 9.2.2 创建不带参数的存储过程使用Create Procedure语句创建存储过程。之前需要注意,必须保证当前登陆数据库的用户拥有在指定数据库中创建存储过程和修改存储过程的权限。存储过程有特定的范围。一般是某个具体的数据库内部。所以,在创建存储过程之前最好显示指定存储过程将要创建在哪个具体的数据库中。CREATE PROCEDURE procedure_nameASBEGIN 相关语句END 9.39.3 执行存储过程执行存储过程,使用EXECUTE语句,语法如下:Execute return_status=schema_name.procedure_name parameter = value|variateOUTPUTDEFAULT,.n WITH RECOMPILE9.49.4 创建带参数的存储过程通常情况下不带参数的存储过程,如查询全部商品类别、查询全部省份、查询全部订单状态等,大多用于对应用程序中的主数据填充,如下拉列表,单选列表或多选列表。而客户大多具体的业务需求都是要根据选择或填写的条件进行有条件查询。带条件查询所占的比重,远超过单纯的无条件的查询。9.69.6 带参数的存储过程的模糊匹配在创建存储过程时,可以为存储过程输入参数指定默认值,根据输入参数的数据类型的不同,默认值也不同,不过大致分为两个类型,精确匹配和模糊匹配,所谓精确匹配是指与参数直接匹配,一般使用“=”、“”、“”等,而模糊匹配主要用于字符串类型,一般使用通配符,如“%”。GetOrdersByCustomerName存储过程就是使用“=”对客户姓名进行的精确匹配。9.79.7 修改和删除存储过程在SQL Server2008中,可以使用ALTER PROC语句修改已经存在的存储过程,使用ALTER PROC和CREATE PROC语句的区别是以下几点: ALTER PROC 找到一个已有的存储过程,而CREATE则不是。ALTER PROC 保留了存储过程上已经建立的任何权限。它在系统对象中保留了相同的对象ID并允许保留依赖关系。修改存储过程也可以在SQL Server Management Studio中找到想要修改的存储过程,右键选择修改如果数据库中某个存储过程不再需要了,可以使用DROP PROC语句删除该存储过程,这种删除是永久性的,不能恢复。删除存储过程的示例如下:USE CsuGODROP PROC其中代表将要删除的存储过程名字。当然我们也可通过SQL Server Management Studio在数据库中选中相应的存储过程,右键点击删除。也是可以实现的。