ストアド プロシージャの実行

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2012 でストアド プロシージャを実行する方法について説明します。

ストアド プロシージャを実行するには、2 つの方法があります。 1 つ目の最も一般的な方法は、アプリケーションまたはユーザーがプロシージャを呼び出す方法です。 2 番目の方法は、SQL Server のインスタンスの起動時にプロシージャが自動的に実行されるように設定する方法です。 アプリケーションまたはユーザーによってプロシージャが呼び出される場合は、Transact-SQL の EXECUTE または EXEC キーワードが呼び出しの中に明示的に指定されています。 または、プロシージャが Transact-SQL バッチ内の最初のステートメントである場合は、このキーワードを使用せずにストアド プロシージャを呼び出すことができます。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

    推奨事項

    セキュリティ

  • ストアド プロシージャを実行するために使用するもの:

    SQL Server Management Studio

    Transact-SQL

作業を開始する準備

制限事項と制約事項

  • システム プロシージャ名を照合するときに、呼び出し元のデータベースの照合順序が使用されます。 そのため、プロシージャの呼び出しでは、システム プロシージャ名の大文字と小文字を常に区別する必要があります。 たとえば、次のコードは、大文字と小文字を区別する照合順序が指定されたデータベースのコンテキストで実行された場合は失敗します。

    ```Transact-SQL
    EXEC SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help
    ```
    

    正確なシステム ストアド プロシージャ名を表示するには、sys.system_objects カタログ ビューおよび sys.system_parameters カタログ ビューをクエリします。

  • システム プロシージャと同じ名前を持つユーザー定義プロシージャは、実行されない可能性があります。

推奨事項

  • システム ストアド プロシージャの実行

    システム ストアド プロシージャは、sp_ というプレフィックスで始まります。 システム ストアド プロシージャは、論理的にすべてのユーザー定義データベースおよびシステム定義データベースに表示されるため、プロシージャ名を完全修飾する必要なく、任意のデータベースから実行できます。 ただし、名前の競合を回避するためには、すべてのシステム プロシージャ名を sys スキーマ名でスキーマ修飾することをお勧めします。 次の例は、システム ストアド プロシージャの呼び出しに関して推奨されている方法を示しています。

    ```Transact-SQL
    EXEC sys.sp_who;
    ```
    
  • ユーザー定義のストアド プロシージャの実行

    ユーザー定義のプロシージャを実行する場合は、プロシージャ名をスキーマ名で修飾することをお勧めします。 これにより、データベース エンジンが複数のスキーマに対して検索を実行する必要がなくなるため、パフォーマンスが多少向上します。 また、複数のスキーマに同じ名前のプロシージャがあるデータベースで誤ったプロシージャが実行されることを防止できます。

    次の例は、ユーザー定義のプロシージャを実行するために推奨されている方法を示しています。 このプロシージャは 1 つの入力パラメーターを受け取ります。 入力パラメーターと出力パラメーターを指定する方法の詳細については、「パラメーターの指定」を参照してください。

    ```Transact-SQL
    USE AdventureWorks2012;
    GO
    EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;
    ```
    

    または

    ```Transact-SQL
    EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50;
    GO
    ```
    

    修飾されていないユーザー定義のプロシージャを指定した場合、データベース エンジンでは次の順序でプロシージャが検索されます。

    1. 現在のデータベースの sys スキーマ。

    2. バッチまたは動的 SQL で実行された場合は、呼び出し側の既定のスキーマ。 または、別のプロシージャ定義の本文の中に非修飾型プロシージャ名がある場合は、そのプロシージャを含んでいるスキーマが次に検索されます。

    3. 現在のデータベースの dbo スキーマ。

  • ストアド プロシージャの自動実行

    自動実行用にマークされたプロシージャは、SQL Server を起動するたびに実行されます。スタートアップ プロセス中に、master データベースが復旧されます。 データベースのメンテナンス操作を実行する場合や、バックグラウンド プロセスとしてプロシージャを連続実行する場合は、自動実行するようにプロシージャを設定すると便利です。 プロシージャの自動実行は、グローバル一時テーブルの作成など、tempdb のシステム タスクまたはメンテナンス タスクを行う場合にも使用できます。 このようにすると、SQL Server のスタートアップ時に tempdb が再作成されても、一時テーブルの存在が保証されます。

    自動実行されるプロシージャは、固定サーバー ロール sysadmin と同じ権限で操作を行います。 これらのプロシージャが生成するエラー メッセージは、SQL Server のエラー ログに書き込まれます。

    スタートアップ プロシージャの数に制限はありませんが、実行中、プロシージャ 1 つにつき 1 つのワーカー スレッドが使用されます。 スタートアップ時に複数のプロシージャを実行する場合でも、並列に実行する必要がないときは 1 つのプロシージャをスタートアップ プロシージャとし、そのプロシージャが残りのプロシージャを呼び出すようにします。 この場合は、全体で 1 つのワーカー スレッドしか使用されません。

    ヒントヒント

    自動実行されるプロシージャからは、結果セットを返さないでください。 自動実行されるプロシージャは、アプリケーションやユーザーではなく SQL Server が実行するので、結果セットを返す先がないためです。

  • 自動実行の設定、解除、および制御

    自動実行されるようにプロシージャを設定できるのは、システム管理者 (sa) だけです。 また、このプロシージャは、master データベースに格納されていて、sa により所有されている必要があり、入出力パラメーターを受け渡すことはできません。

    次の操作を実行するには、sp_procoption を使用します。

    1. 既存のプロシージャをスタートアップ プロシージャとして指定する。

    2. SQL Server のスタートアップ時にプロシージャが実行されないようにする。

セキュリティ

詳細については、「EXECUTE AS (Transact-SQL)」および「EXECUTE AS 句 (Transact-SQL)」を参照してください。

権限

詳細については、「EXECUTE (Transact-SQL)」の「権限」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

SQL Server Management Studio の使用

ストアド プロシージャを実行するには

  1. オブジェクト エクスプローラーで、SQL Server データベース エンジンのインスタンスに接続して、そのインスタンスを展開します。次に、[データベース] を展開します。

  2. 目的のデータベースを展開し、[プログラミング] を展開します。次に、[ストアド プロシージャ] を展開します。

  3. 目的のユーザー定義のストアド プロシージャを右クリックし、[ストアド プロシージャの実行] をクリックします。

  4. [プロシージャの実行] ダイアログ ボックスで、各パラメーターの値と、null 値を渡すかどうかを指定します。

    • [パラメーター]
      パラメーターの名前を示します。

    • [データ型]
      パラメーターのデータ型を示します。

    • [出力パラメーター]
      これが出力パラメーターかどうかを示します。

    • [NULL 値を渡す]
      パラメーターの値として NULL を渡します。


    • プロシージャを呼び出すときのパラメーターの値を入力します。

  5. ストアド プロシージャを実行するには、[OK] をクリックします。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

Transact-SQL の使用

ストアド プロシージャを実行するには

  1. データベース エンジンに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。 この例は、1 つのパラメーターを受け取るストアド プロシージャを実行する方法を示します。 この例では、@EmployeeID パラメーター値として値 6 を指定して、uspGetEmployeeManagers ストアド プロシージャを実行します。

```Transact-SQL
USE AdventureWorks2012;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
```

プロシージャの自動実行を設定または解除するには

  1. データベース エンジンに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。 この例は、sp_procoption を使用してプロシージャの自動実行を設定する方法を示しています。

```Transact-SQL
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>' 
    , @OptionName = ] 'startup' 
    , @OptionValue = 'on';
```

プロシージャの自動実行を解除するには

  1. データベース エンジンに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。 この例は、sp_procoption を使用して、プロシージャの自動実行を解除する方法を示しています。

```Transact-SQL
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>' 
    , @OptionValue = 'off';
```

例 (Transact-SQL)

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

参照

EXECUTE (Transact-SQL)

CREATE PROCEDURE (Transact-SQL)

概念

パラメーターの指定

scan for startup procs サーバー構成オプションの構成

ストアド プロシージャ (データベース エンジン)