Microsoft SQL Server提供了存储过程机制,通过将Transact-SQL语句分组为可管理的块来简化数据库开发过程。大多数SQL Server开发人员都很欣赏存储过程,他们发现他们所获得的效率和安全性好处非常值得及时投资。
使用存储过程的好处
为什么开发人员应该使用存储过程?
以下是该技术的主要优点:
- 预编译执行: SQL Server编译每个存储过程一次,然后重新使用执行计划。当重复调用存储过程时,这会带来巨大的性能提升。
- 减少客户端/服务器流量: 如果网络带宽是您环境中的一个问题,那么您将很高兴地了解到存储过程可以将长SQL查询减少到通过线路传输的单行。
- 有效地重用代码和编程抽象: 多个用户和客户端程序可以使用存储过程。如果您以有计划的方式使用它们,您会发现开发周期花费的时间更少。
- 增强安全控制: 您可以授予用户独立于基础表权限执行存储过程的权限。
存储过程与用户定义的函数类似,但存在细微差别。
结构体
存储过程类似于其他编程语言中的构造。
它们以执行时指定的输入参数的形式接受数据。这些输入参数(如果实现的话)用于执行产生一些结果的一系列语句。通过使用记录集,输出参数和返回代码将此结果返回到调用环境。
这可能听起来像是满口,但你会发现存储过程实际上非常简单。
例
让我们看一下与本页底部显示的名为inventory的表相关的实际示例。这些信息会实时更新,仓库经理会不断检查存储在仓库中并可供出货的产品级别。过去,每个经理都会运行类似以下的查询:
选择产品,数量来自库存仓库='FL'
这导致SQL Server的性能低下。每次仓库经理执行查询时,数据库服务器都被迫重新编译查询并从头开始执行。它还要求仓库经理了解SQL以及访问表信息的适当权限。相反,可以通过使用存储过程简化该过程。这是一个名为sp_GetInventory的过程的代码,用于检索给定仓库的库存级别。 然后佛罗里达仓库经理可以通过发出命令来访问库存水平: 纽约仓库经理可以使用相同的存储过程来访问该区域的库存: 当然,这是一个简单的例子,但这里可以看到抽象的好处。仓库管理员不需要了解SQL或过程的内部工作原理。从性能角度来看,存储过程可以创建奇迹。 SQL Server创建一次执行计划,然后通过在执行时插入适当的参数来重新使用它。既然您已经了解了存储过程的好处,那就去那里使用它们吧。 尝试一些示例并测量所实现的性能增强 - 您会感到惊讶! 库存表创建过程sp_GetInventory@location varchar(10)如选择产品,数量来自库存仓库= @location
执行sp_GetInventory'FL'
执行sp_GetInventory'NY'
ID 产品 仓库 数量 142 绿豆 纽约 100 214 豌豆 FL 200 825 玉米 纽约 140 512 利马豆 纽约 180 491 番茄 FL 80 379 西瓜 FL 85