建立預存程序

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

本文描述如何使用 SQL Server Management Studio 以及使用 Transact-SQL CREATE PROCEDURE 陳述式,建立 SQL Server 預存程序。

權限

需要在資料庫中的 CREATE PROCEDURE 權限,以及在建立程序時所在的結構描述上的 ALTER 權限。

建立預存程序

您可以使用 SQL Server Management Studio (SSMS) 使用者介面或 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:視需要以第一個參數的預設值或 NULL 取代 0
    • @Param2:以您的第二個參數名稱取代 @p2,例如 @ColumnName2
    • @Datatype_For_Param2:視需要以第二個參數的資料類型取代 int,例如 nvarchar(50)
    • Default_Value_For_Param2:視需要以第二個參數的預設值或 NULL 取代 0

    下列螢幕擷取畫面顯示範例預存程序的已完成對話框:

    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 範例程序,請為 @LastName 參數輸入 Cannon,併為 @FirstName 參數輸入 Chris,然後選取 [確定]。 預存程序隨即執行,並傳回 FirstNameChrisLastNameCannonCompanyNameOutdoor Sporting Goods

重要

驗證所有使用者輸入。 在使用者輸入完成驗證前,請勿加以串連。 請勿執行由未經驗證之使用者輸入所建構的命令。

使用 Transact-SQL

若要在 SSMS 查詢編輯器中建立程序:

  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 陳述式,提供任何參數的值,然後選取 [執行]。 如需詳細指引,請參閱執行預存程序