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