建立預存程序
適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics 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 中建立預存程序:
在 [物件總管] 中,連線到 SQL Server 或 Azure SQL 資料庫的執行個體。
如需詳細資訊,請參閱下列快速入門:
展開執行個體,然後展開 [資料庫]。
展開您要的資料庫,然後展開 [可程式性]。
以滑鼠右鍵按一下 [預存程序],然後選取 [新增]>[預存程序]。 新的查詢視窗隨即開啟,其中包含預存程序的範本。
預設預存程序範本有兩個參數。 如果您的預存程序具有更少、更多參數或沒有參數,請視需要新增或移除範本中的參數行。
在 [查詢] 功能表上,選取 [指定範本參數的值]。
在 [指定範本參數值] 對話框中,提供 [值] 字段的下列資訊:
- 作者:以您的名稱取代
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
。
下列螢幕擷取畫面顯示範例預存程序的已完成對話框:
- 作者:以您的名稱取代
選取 [確定]。
在 [查詢編輯器] 中,以您程序的查詢取代 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
範例程序,請為 @LastName 參數輸入 Cannon,併為 @FirstName 參數輸入 Chris,然後選取 [確定]。 預存程序隨即執行,並傳回FirstName
Chris、LastName
Cannon 和CompanyName
Outdoor Sporting Goods。
重要
驗證所有使用者輸入。 在使用者輸入完成驗證前,請勿加以串連。 請勿執行由未經驗證之使用者輸入所建構的命令。
使用 Transact-SQL
若要在 SSMS 查詢編輯器中建立程序:
在 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 陳述式,提供任何參數的值,然後選取 [執行]。 如需詳細指引,請參閱執行預存程序。