Skip to main content

为SQL Server创建存储过程

01.存储过程简介 (六月 2025)

01.存储过程简介 (六月 2025)
Anonim

Microsoft SQL Server提供了存储过程机制,通过将Transact-SQL语句分组为可管理的块来简化数据库开发过程。大多数SQL Server开发人员都很欣赏存储过程,他们发现他们所获得的效率和安全性好处非常值得及时投资。

使用存储过程的好处

为什么开发人员应该使用存储过程?

以下是该技术的主要优点:

  • 预编译执行: SQL Server编译每个存储过程一次,然后重新使用执行计划。当重复调用存储过程时,这会带来巨大的性能提升。
  • 减少客户端/服务器流量: 如果网络带宽是您环境中的一个问题,那么您将很高兴地了解到存储过程可以将长SQL查询减少到通过线路传输的单行。
  • 有效地重用代码和编程抽象: 多个用户和客户端程序可以使用存储过程。如果您以有计划的方式使用它们,您会发现开发周期花费的时间更少。
  • 增强安全控制: 您可以授予用户独立于基础表权限执行存储过程的权限。

存储过程与用户定义的函数类似,但存在细微差别。

结构体

存储过程类似于其他编程语言中的构造。

它们以执行时指定的输入参数的形式接受数据。这些输入参数(如果实现的话)用于执行产生一些结果的一系列语句。通过使用记录集,输出参数和返回代码将此结果返回到调用环境。

这可能听起来像是满口,但你会发现存储过程实际上非常简单。

让我们看一下与本页底部显示的名为inventory的表相关的实际示例。这些信息会实时更新,仓库经理会不断检查存储在仓库中并可供出货的产品级别。过去,每个经理都会运行类似以下的查询:

选择产品,数量来自库存仓库='FL'

这导致SQL Server的性能低下。每次仓库经理执行查询时,数据库服务器都被迫重新编译查询并从头开始执行。它还要求仓库经理了解SQL以及访问表信息的适当权限。相反,可以通过使用存储过程简化该过程。这是一个名为sp_GetInventory的过程的代码,用于检索给定仓库的库存级别。

创建过程sp_GetInventory@location varchar(10)选择产品,数量来自库存仓库= @location

然后佛罗里达仓库经理可以通过发出命令来访问库存水平:

执行sp_GetInventory'FL'

纽约仓库经理可以使用相同的存储过程来访问该区域的库存:

执行sp_GetInventory'NY'

当然,这是一个简单的例子,但这里可以看到抽象的好处。仓库管理员不需要了解SQL或过程的内部工作原理。从性能角度来看,存储过程可以创建奇迹。 SQL Server创建一次执行计划,然后通过在执行时插入适当的参数来重新使用它。既然您已经了解了存储过程的好处,那就去那里使用它们吧。

尝试一些示例并测量所实现的性能增强 - 您会感到惊讶!

库存表

ID产品仓库数量
142绿豆纽约100
214豌豆FL200
825玉米纽约140
512利马豆纽约180
491番茄FL80
379西瓜FL85