创建存储过程
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric SQL 数据库
本文介绍如何使用 SQL Server Management Studio 和 Transact-SQL CREATE PROCEDURE 语句来创建 SQL Server 存储过程。
权限
需要在数据库中有 CREATE PROCEDURE 权限,对在其中创建过程的架构有 ALTER 权限。
创建存储过程
可以在 SSMS 查询窗口中使用 SQL Server Management Studio (SSMS) 用户界面或 Transact-SQL 来创建存储过程。 始终使用最新版本的 SSMS。
注意
本文中的示例存储过程使用示例 AdventureWorksLT2022
(SQL Server) 或 AdventureWorksLT
(Azure SQL 数据库)数据库。 有关如何获取和使用 AdventureWorksLT
示例数据库的说明,请参阅 AdventureWorks 示例数据库。
使用 SQL Server Management Studio
要在 SSMS 中创建存储过程,请执行以下操作:
在“对象资源管理器”中,连接到 SQL Server 或 Azure SQL 数据库的实例。
有关更多信息,请参阅以下快速入门:
展开实例,然后展开“数据库”。
展开所需的数据库,然后展开“可编程性”。
右键单击“存储过程”,然后选择“新建”>“存储过程”。 此时会打开一个新的查询窗口,其中包含存储过程的模板。
默认的存储过程模板具有两个参数。 如果存储过程的参数更少、更多或没有参数,请根据需要在模板中添加或删除参数行。
在 “查询” 菜单上,选择 “指定模板参数的值”。
在“指定模板参数值”对话框中,提供“值”字段的以下信息:
- 作者:将
Name
替换为你自己的名称。 - 创建日期:输入今天的日期。
- 说明:简要描述该过程的作用。
- Procedure_Name:将
ProcedureName
替换为新的存储过程名称。 - @Param1:将
@p1
替换为第一个参数名称,例如 @ColumnName1。 - @Datatype_For_Param1:根据需要,将
int
替换为第一个参数的数据类型,例如 nvarchar(50)。 - Default_Value_For_Param1:根据需要,将
0
替换为第一个参数的默认值或 NULL。 - @Param2:将
@p2
替换为第二个参数名称,例如 @ColumnName2。 - @Datatype_For_Param2:根据需要,将
int
替换为第二个参数的数据类型,例如 nvarchar(50)。 - Default_Value_For_Param2:根据需要,将
0
替换为第二个参数的默认值或 NULL。
以下屏幕截图显示了示例存储过程的已完成对话框:
- 作者:将
选择“确定”。
在“查询编辑器”中,将 SELECT 语句替换为过程的查询。
以下代码显示了示例存储过程的已完成 CREATE PROCEDURE 语句:
-- ======================================================= -- Create Stored Procedure Template for Azure SQL Database -- ======================================================= SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: My Name -- Create Date: 01/23/2024 -- Description: Returns the customer's company name. -- ============================================= CREATE PROCEDURE SalesLT.uspGetCustomerCompany ( -- Add the parameters for the stored procedure here @LastName nvarchar(50) = NULL, @FirstName nvarchar(50) = NULL ) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON -- Insert statements for procedure here SELECT FirstName, LastName, CompanyName FROM SalesLT.Customer WHERE FirstName = @FirstName AND LastName = @LastName; END GO
若要测试语法,请在“查询”菜单上选择“分析”。 更正所有错误。
从工具栏中选择“执行”。 该过程作为数据库中的对象创建。
要查看“对象资源管理器”中列出的过程,请右键单击“存储过程”,然后选择“刷新”。
要运行该过程,请执行以下步骤:
在“对象资源管理器”中,请右键单击存储过程名称,然后选择“执行存储过程”。
在“执行过程”窗口中,输入所有参数的值,然后选择“确定”。 有关详细说明,请参阅执行存储过程。
例如,要运行
SalesLT.uspGetCustomerCompany
示例过程,请输入 Cannon 作为 @LastName 参数,并输入 Chris 作为 @FirstName 参数,然后选择“确定”。 存储过程将运行并返回FirstName
Chris、LastName
Cannon 和CompanyName
Outdoor Sporting Goods。
重要
验证所有用户的输入。 验证用户输入前请勿将其连接。 绝对不要执行根据尚未验证的用户输入构造的命令。
使用 Transact-SQL
要在“查询编辑器”中创建过程,请执行以下操作:
在 SSMS 中,连接到 SQL Server 或 Azure SQL 数据库的实例。
从工具栏中选择“新建询问”。
在查询窗口中输入以下代码,将
<ProcedureName>
、任何参数的名称和数据类型以及 SELECT 语句替换为你自己的值。CREATE PROCEDURE <ProcedureName> @<ParameterName1> <data type>, @<ParameterName2> <data type> AS SET NOCOUNT ON; SELECT <your SELECT statement>; GO
例如,以下语句在
AdventureWorksLT
数据库中创建与上一个示例相同的存储过程,但过程名称略有不同。CREATE PROCEDURE SalesLT.uspGetCustomerCompany1 @LastName nvarchar(50), @FirstName nvarchar(50) AS SET NOCOUNT ON; SELECT FirstName, LastName, CompanyName FROM SalesLT.Customer WHERE FirstName = @FirstName AND LastName = @LastName; GO
从工具栏中选择“执行”以执行查询。 将创建存储过程。
要运行存储过程,请在新的查询窗口中输入 EXECUTE 语句,提供任何参数的值,然后选择“执行”。 有关详细说明,请参阅执行存储过程。