SQL 存储过程

2025年2月2日 | 5 分钟阅读

结构化查询语言 (SQL) 中的存储过程是一组存储在数据库中的逻辑语句,用于执行特定任务。

它是一个子程序,由名称、参数列表和 Transact-SQL 语句组成。

任何用户都可以将存储过程作为命名对象存储在 SQL 数据库中,并可以通过触发器、其他过程以及其他编程应用程序(如 Java、PHP、R、C#、Python 等)进行调用。

当第一次调用存储过程时,SQL 数据库会创建一个执行计划并将其存储在缓存内存中。该计划会被 SQL Server 重用,从而以可靠的性能快速执行存储过程。

存储过程的类型

SQL 中存储过程的类型如下:

  • 用户定义存储过程
  • 系统存储过程

用户定义存储过程

用户定义存储过程由数据库开发人员和管理员创建,并存储在当前数据库中。

此类型的存储过程提供一个或多个 SQL 语句,用于从数据库表中检索、更新和删除值。

用户定义存储过程进一步分为以下两种类型:

  1. T-SQL 存储过程
  2. CLR 存储过程

T-SQL 存储过程

Transact-SQL 过程接受参数并返回它们。此存储过程管理带或不带参数的 INSERT、UPDATE 和 DELETE 语句,并在输出中提供行数据。

CLR 存储过程

CLR 存储过程是结合了 CLR (Common Language Runtime) 和使用 C#、VB.NET 等 CLR 语言编写的另一个存储过程而创建的存储过程。

CLR 过程是 .Net Framework 的对象,在 SQL 数据库服务器的内存中执行。

系统存储过程

SQL 数据库服务器创建并执行系统存储过程以进行管理活动。SQL 数据库服务器不允许开发人员干扰系统存储过程。

SQL 中的存储过程语法

以下语法用于在结构化查询语言中创建简单的存储过程

以下语法用于在结构化查询语言中执行存储过程

SQL 存储过程示例

首先,我们必须创建表并在 SQL 中向表中插入数据。

以下查询使用 CREATE TABLE 语句创建 **Student_Stored_Procedure** 表

以下 SQL 查询使用 INSERT INTO 语句插入上述表中学生的记录

让我们使用以下SELECT语句查看上述表的记录。


学生编号 (Student_ID)学生姓名Student_CourseStudent_Age学生分数
101AnujB.tech2088
102拉曼 (Raman)MCA2498
104ShyamBBA1992
107VikashB.tech2078
111MonuMBA2165
114JonesB.tech1893
121ParulBCA2097
123DivyaB.tech2189
128HemantMBA2390
130NidhiBBA2088
132PriyaMBA2299
138MohitMCA2192

以下查询创建存储过程,该存储过程从上述 Student_Stored_Procedure 表中选择所有记录

现在,使用以下查询执行存储过程以查看其输出

输出

学生编号 (Student_ID)学生姓名Student_CourseStudent_Age学生分数
101AnujB.tech2088
102拉曼 (Raman)MCA2498
104ShyamBBA1992
107VikashB.tech2078
111MonuMBA2165
114JonesB.tech1893
121ParulBCA2097
123DivyaB.tech2189
128HemantMBA2390
130NidhiBBA2088
132PriyaMBA2299
138MohitMCA2192

带一个参数的存储过程

带一个参数的存储过程的创建语法如下

带一个参数的存储过程的执行语法如下

以下查询创建存储过程,该存储过程显示上述表中的特定课程的学生

以下查询执行上述存储过程,并在输出中显示 B.tech 学生的记录

输出

学生编号 (Student_ID)学生姓名Student_CourseStudent_Age学生分数
101AnujB.tech2088
107VikashB.tech2078
114JonesB.tech1893
123DivyaB.tech2189

带多个参数的存储过程

带一个以上参数的存储过程的创建语法如下

带多个参数的存储过程的执行语法如下

以下查询创建存储过程,该存储过程显示上述表中具有特定年龄的特定课程的学生

以下查询执行存储过程,并在输出中显示课程为 B.tech 且年龄为 20 的学生的记录

SQL 存储过程的优点

以下是结构化查询语言中存储过程的重要优势或优点:

  • 减少网络流量:存储过程最大限度地减少了应用程序和数据库服务器之间的网络流量,因为应用程序只需将存储过程的名称和参数传递给数据库服务器,而无需发送多行 SQL 代码。
  • 更强的安全性:存储过程提供了高度安全性,因为它限制用户直接访问表中的数据。
  • 可重用:存储过程可以由多个用户使用,而无需重复编写相同的 SQL 代码。代码的可重用性最大限度地减少了开发时间。
  • 易于修改:任何用户都可以使用 ALTER TABLE 命令轻松修改存储过程。
  • 提高性能:SQL 中的存储过程最大限度地提高了应用程序的性能。

下一个主题SQL SELECT AVG