Sql Server系列:开发存储过程
客户/服务器开发的主要目的在于将处理数据的程序移动到离数据尽可能近的地方。通过将处理数据的程序从客户应用程序移动到服务器,可以降低网络流量,并提高性能和数据的完整性。
要将处理数据的程序移动到离数据更近的地方,最常用的方法之一就是开发存储过程。
1、管理存储过程
1.1、create、alter和drop
存储过程是由如下的数据定义语言命令来管理的:create、alter和drop。
create用于创建存储过程,它是批处理中的第一个命令,批处理的正常结束就意味着存储过程创建成功。drop命令会从数据库中删除存储过程,alter命令会将原有的存储过程替换为新的代码。如果要修改存储过程,最好采用alter方法,而不要使用先删除,再重建的方式,因为后一种方法会丢失原来存储过程上所有的权限设置。
CREATE PROCEDURE CategoryList AS SELECT CategoryName FROM Category
1.2、返回记录集
存储过程可以返回记录集。
EXEC CategoryList
1.3、编译存储过程
对应存储过程的编译是自动进行的。在第一次执行存储过程的时候,就会对存储过程进行编译,并将编译结果保存在内存中。如果重新启动了服务器,所有存储过程的编译结果就全部丢失。只有当再次调用它们时,才会重新对它们进行编译。
SQL Server使用Master.dbo.SysCacheObjects表来记录编译过的对象。要查看编译过的存储过程,可以运行下面的查询:
SELECT CASE(C.sql AS CHAR(35)) AS StoreProcedure, cacheobjtype,usecounts AS Count FROM Master.dbo.SysCacheObjects C JOIN Master.dbo.SysDatabases D ON C.dbid = D.dbid WHERE D.Name = DB_Name() AND ObjType = 'Proc' ORDER BY StoreProcedure
2、向存储过程传递数据
SQL Server存储过程可以使用很多的输入和输出参数。
2.1、输入参数
如果要使用输入参数向存储过程传递数据,可以在create procedure命令中的存储过程名之后列出需要添加的参数。每个参数都必须以@开始,一旦声明了输入参数,它就会成为该存储过程中的局部变量。就像声明局部变量一样,必须使用合法的数据类型来定义输入参数。在调用存储过程时,必须为这些输入变量提供值(除非该输入变量具有默认值)。