SQL Server 的 SQL 存储过程

什么是存储过程?

存储过程是一种预编译的 SQL 代码,可以保存并重复使用。

如果你有一个反复编写的 SQL 查询,可以将其保存为存储过程,之后只需调用即可执行。

存储过程还可以包含参数,因此能够根据传入的参数值执行相应的操作。

存储过程的主要优势

存储过程在数据库管理中被广泛使用,并具有以下优势:

  • 代码可重用性 - 同一存储过程可被不同应用程序调用
  • 提高性能 - 存储过程经过预编译,运行速度更快
  • 数据库安全性 - 可为用户设置仅执行特定存储过程的权限(限制对表的直接访问)
  • 易于维护 - 更新存储过程时,所有调用它的地方会自动同步更新

存储过程语法 (SQL Server)

要创建存储过程,请使用 CREATE PROCEDURE 语句:

CREATE PROCEDURE procedure_name
  @param1 datatype,
  @param2 datatype
AS
BEGIN
  -- 要执行的 SQL 语句
  SELECT column1, column2
  FROM table_name
  WHERE columnN = @paramN;
END;

提示:要查看 MySQL 数据库的语法,请查看 MySQL 存储过程

执行存储过程

要运行存储过程,请使用 EXEC 语句:

EXEC procedure_name @param1 = 'value1', @param2 = 'value2';

删除存储过程

要删除存储过程,请使用 DROP PROCEDURE 语句:

DROP PROCEDURE procedure_name;

提示:为了确保在存储过程不存在时 DROP PROCEDURE 不会返回错误,请添加 IF EXISTS 子句:

DROP PROCEDURE IF EXISTS procedure_name;

演示数据库

以下是 Northwind 示例数据库中 Customers 表中的片段:

CustomerID CustomerName ContactName Address City PostalCode Country
1

Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4

Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK

存储过程示例

以下 SQL 语句创建一个名为 GetCustomersByCity 的存储过程,可用于从 Customers 表中选择来自特定城市的客户:

实例

CREATE PROCEDURE GetCustomersByCity
  @City nvarchar(50)
AS
BEGIN
  SELECT * FROM Customers
  WHERE City = @City;
END;

这里我们通过传递城市 ('London') 作为参数来执行存储过程,存储过程从 "Customers" 表返回相关详细信息:

实例

EXEC GetCustomersByCity @City = 'London';

带多个参数的存储过程

添加多个参数很简单。只需列出每个参数及其数据类型,用逗号分隔即可,如下所示。

以下 SQL 语句创建一个存储过程,从 Customers 表中选择来自特定城市且具有特定邮政编码的客户:

实例

CREATE PROCEDURE GetCustomersByCity
  @City nvarchar(50),
  @PostalCode nvarchar(10)
AS
BEGIN
  SELECT * FROM Customers
  WHERE City = @City AND PostalCode = @PostalCode;
END;

按如下方式执行上述存储过程:

实例

EXEC GetCustomersByCity @City = 'London', @PostalCode = 'WA1 1DP';