ストアド プロシージャの作成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

この記事では、SQL Server Management Studio と Transact-SQL CREATE PROCEDURE ステートメントを使用し、SQL Server ストアド プロシージャを作成する方法について説明します。

アクセス許可

データベースの CREATE PROCEDURE 権限と、プロシージャを作成するスキーマに対する ALTER 権限が必要です。

ストアド プロシージャの作成

SQL Server Management Studio (SSMS) ユーザー インターフェイス、または Transact-SQL を SSMS クエリ ウィンドウ内で使用することでストアド プロシージャを作成することができます。 常に SSMS の最新のバージョンを使用します。

Note

この記事のストアド プロシージャの例では、サンプル AdventureWorksLT2022 (SQL Server) または AdventureWorksLT (Azure SQL データベース) データベースを使用します。 AdventureWorksLT サンプル データベースのを取得して使用する手順については、「Adventure Works サンプル データベース」を参照してください。

SQL Server Management Studio を使用する

SSMS でストアド プロシージャを作成するには:

  1. オブジェクト エクスプローラーで、SQL Server または Azure SQL データベースのインスタンスに接続します。

    詳細については、次のクイック スタートを参照してください。

  2. インスタンスを展開し、データベースを展開します。

  3. 目的のデータベースを展開し、次に [プログラミング]を展開します。

  4. [ストアド プロシージャ] を右クリックし、[新しい>ストアド プロシージャ] を選択します。 新しいクエリ ウィンドウが開き、ストアド プロシージャのテンプレートが表示されます。

    既定のストアド プロシージャ テンプレートには、2 つのパラメーターがあります。 ストアド プロシージャのパラメーター数が少ない、追加する、またはパラメーターがない場合は、必要に応じてテンプレートにパラメーター行を追加または削除します。

  5. [クエリ] メニューの [テンプレート パラメーターの値の指定]をクリックします。

  6. [テンプレート パラメーターの値の指定] ダイアログ ボックスで、[値] フィールドに次の情報を指定します。

    • 作成者: Name をユーザー名に置き換えます。
    • 作成日: 今日の日付を入力します。
    • 説明: 手順の内容を簡単に説明します。
    • Procedure_Name: ProcedureName を新しいストアド プロシージャ名に置き換えます。
    • @Param1: @p1@ColumnName1 などの最初のパラメーター名に置き換えます。
    • @Datatype_For_Param1: 必要に応じて、intnvarchar(50) などの最初のパラメーターのデータ型に置き換えます。
    • Default_Value_For_Param1: 必要に応じて、0 を最初のパラメーターの既定値、または NULL に置き換えます。
    • @Param2: @p2@ColumnName2 などの 2 つ目のパラメーター名に置き換えます。
    • @Datatype_For_Param2: 必要に応じて、intnvarchar(50) などの 2 つ目のパラメーターのデータ型に置き換えます。
    • Default_Value_For_Param2: 必要に応じて、 0 を 2 番目のパラメーターの既定値、または NULL に置き換えます。

    次のスクリーンショットは、ストアド プロシージャの例の完了済みダイアログ ボックスを示しています。

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

  7. [OK] を選択します。

  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. [プロシージャの実行] ウィンドウで、すべてのパラメーターの値を入力し、[OK] を選択します。 詳細な手順については、「ストアド プロシージャの実行」を参照してください。

    たとえば、SalesLT.uspGetCustomerCompany サンプル プロシージャを実行するには、@LastName パラメーターに「Cannon」、@FirstName パラメーターに「Chris」と入力し、[OK] を選択します。 ストアド プロシージャにより、FirstNameChrisLastNameCannon、およびCompanyNameアウトドア スポーツ商品が返されます。

重要

すべてのユーザー入力を検証します。 ユーザー入力は検証するまで連結しないでください。 検証していないユーザー入力から作成されたコマンドは、絶対に実行しないでください。

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 ステートメントを入力し、パラメーターの値を指定して、[実行] を選択します。 詳細な手順については、「ストアド プロシージャの実行」を参照してください。