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';