创建存储过程

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

本文介绍如何使用 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 中创建存储过程,请执行以下操作:

  1. 在“对象资源管理器”中,连接到 SQL Server 或 Azure SQL 数据库的实例。

    有关更多信息,请参阅以下快速入门:

  2. 展开实例,然后展开“数据库”

  3. 展开所需的数据库,然后展开“可编程性”

  4. 右键单击“存储过程”,然后选择“新建”>“存储过程”。 此时会打开一个新的查询窗口,其中包含存储过程的模板。

    默认的存储过程模板具有两个参数。 如果存储过程的参数更少、更多或没有参数,请根据需要在模板中添加或删除参数行。

  5. “查询” 菜单上,选择 “指定模板参数的值”

  6. 在“指定模板参数值”对话框中,提供“值”字段的以下信息:

    • 作者:将 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

    以下屏幕截图显示了示例存储过程的已完成对话框:

    Screenshot that shows a completed Specify Values for Template Parameters dialog box.

  7. 选择“确定”

  8. 在“查询编辑器”中,将 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
    
  9. 若要测试语法,请在“查询”菜单上选择“分析”。 更正所有错误。

  10. 从工具栏中选择“执行”。 该过程作为数据库中的对象创建。

  11. 要查看“对象资源管理器”中列出的过程,请右键单击“存储过程”,然后选择“刷新”

要运行该过程,请执行以下步骤:

  1. 在“对象资源管理器”中,请右键单击存储过程名称,然后选择“执行存储过程”

  2. 在“执行过程”窗口中,输入所有参数的值,然后选择“确定”。 有关详细说明,请参阅执行存储过程

    例如,要运行 SalesLT.uspGetCustomerCompany 示例过程,请输入 Cannon 作为 @LastName 参数,并输入 Chris 作为 @FirstName 参数,然后选择“确定”。 存储过程将运行并返回 FirstNameChrisLastNameCannonCompanyNameOutdoor Sporting Goods

重要

验证所有用户的输入。 验证用户输入前请勿将其连接。 绝对不要执行根据尚未验证的用户输入构造的命令。

使用 Transact-SQL

要在“查询编辑器”中创建过程,请执行以下操作:

  1. 在 SSMS 中,连接到 SQL Server 或 Azure SQL 数据库的实例。

  2. 从工具栏中选择“新建询问”

  3. 在查询窗口中输入以下代码,将 <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
    
  4. 从工具栏中选择“执行”以执行查询。 将创建存储过程。

  5. 要运行存储过程,请在新的查询窗口中输入 EXECUTE 语句,提供任何参数的值,然后选择“执行”。 有关详细说明,请参阅执行存储过程