跳至内容
SQL

SQL 中的用户自定义存储过程

学习如何使用和应用用户自定义存储过程,并了解 SQL 中不同类型的存储过程。
Olivia Smith
已更新 · 5分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。

您将使用 Microsoft SQL Server 作为数据库。本教程涉及的概念适用于大多数关系型数据库管理系统(RDBMS),但语法有所不同,不过此处使用的思路对所有数据库都适用。

存储过程是关系型数据库管理系统(RDBMS)中的一段 SQL 语句块,通常由程序员、数据库管理员、数据分析师编写,并保存以便在多个程序中复用。根据不同的 RDBMS,它也可以有不同的类型。然而,在任何 RDBMS 中最关键的两类存储过程如下:

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

存储过程是预先编译并缓存的代码,之后可以复用。使用可复用的缓存代码能让维护更轻松,例如无需多处修改,也有助于保障安全性。

创建数据表

现在,您将创建一个名为 table_Employees 的数据表,如下所示。

CREATE TABLE table_Employees
(
    EmployeeId INT PRIMARY KEY NOT NULL,
    EmployeeFirstName VARCHAR(25) NOT NULL,
    EmployeeLastName VARCHAR(25) NOT NULL,
    EmployeeGender VARCHAR(25) NOT NULL,
    EmployeeDepartmentID INT

)

该表包含某公司员工的信息,包括以下列:

  1. EmployeeId: 主键,唯一,整数类型,值自动递增。
  2. EmployeeFirstName: 员工名,字符类型,不能为空。
  3. EmployeeLast Name: 员工姓氏,字符类型,不能为空。
  4. EmployeeGender: 员工性别,字符类型。
  5. EmployeeDepartmentId: 员工所属部门 ID,整数类型。

您可以编写查询将值插入到表中。向表中添加值的通用查询为:

    INSERT INTO <TABLE_NAME>(<COLUMNS_OF_TABLE>) VALUES(<CORRESPONDING_VALUES_TO_MATCH_COLUMN>)

将值插入表后,即创建完成 table_Employees。

table_Employees

创建用户自定义存储过程

存储过程让您只需编写一次查询,并为其命名以便保存,需要时可多次执行。执行这些查询后,您会在 Programmabilty->Stored Procedure 下看到创建的文件夹,以及名为 dbo.uprocGetEmployees 的文件。

创建存储过程的语法为:

CREATE PROCEDURE <<<procedure_name>>>
AS
BEGIN

   '''Required SQL Queries'''

END

您可以使用以下 SQL 语句创建存储过程。

  • CREATE PROCEDURE procedure_name
  • CREATE PROC procedure_name

另外,应使用除 "sp_." 之外的命名约定来创建存储过程。示例中的存储过程名为:uprocGetEmployees。

Stored Procedure example

执行存储过程

要执行存储过程,您可以使用以下三种方式之一来运行:

  • EXEC <>
  • EXECUTE <>
  • <>

在上述程序中,您可以使用过程名 uprocGetEmployees 并选择它来执行查询。

带参数的存储过程

存储过程可以接收单个或多个参数。若先理解多参数,理解单参数就很容易。

创建带多个参数的存储过程的语法为:

CREATE PROCEDURE <<procedure_name>> <<procedure_parameter>>
AS
    BEGIN
            <<sql_query>>
    END

示例显示下方的文件夹发生了变化。
EMPLOYEE->Programmability->Stored Procedures->dbo.uprocGetEmployessGenderAndDepartment

Stored Procedures with multiple parameters

这里的概念与 Python、Java 等通用编程语言中的函数非常相似。上面的程序包含一个名为 "uprocGetEmployeesGenderAndDepartment" 的函数或过程,带有参数 @EmployeeGender 和 @EmployeeDepartmentId。通过向过程“传入”所需的值来“调用”这些参数,方式有两种,见下文说明。

该程序的参数为 @EmployeeGender 和 @EmployeeDepartmentId,通过向参数传递值来“调用”。

指定参数值可以有两种方式。您可以任选其一来执行带多个参数的存储过程。

  • 在查询中显式写出参数名并传入所需值:

Specifying value 1

  • 按参数位置顺序传参,使之与存储过程的参数位置对应,并向参数传入所需值:

Specifying value 2

修改存储过程

您也可以使用 ALTER PROCEDURE 命令修改存储过程。

    ALTER PROCEDURE uprocGetEmployeesGenderAndDepartment
@EmployeeGender nvarchar(25),
@EmployeeDepartmentId int
BEGIN
    SELECT EmployeeFirstName,EmployeeGender,EmployeeDepartmentId FROM table_Employees WHERE
    EmployeeGender = @EmployeeGender AND EmployeeDepartmentId = @EmployeeDepartmentId
END

删除存储过程

可以使用以下命令快速删除存储过程:

DROP PROC <> DROP PROCEDURE <>

通过加密增强安全性

下图左侧的锁形图标表示存储过程已加密,仅授权人员可访问。

encrypted Stored Procedure

结语

您刚刚学习了用户存储过程的基础知识,这些主题在概念上与任何 RDBMS 都类似。您可以在 DataCamp 上进一步学习,参加他们的 Intermediate SQL Server 课程。此外,以下 Stored Procedures 教程也将对您的学习大有裨益。

主题
SQL

SQL 课程

课程

SQL 中的数据处理

4 小时
338.4K
掌握复杂的 SQL 查询,解答各种数据科学问题,并在 PostgreSQL 中准备稳健的数据集用于分析。
查看详情开始课程

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。
查看更多