次の方法で共有


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

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

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

このトピックの内容

はじめに

制限事項と制約事項

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

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

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

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

推奨事項

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

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

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

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

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

    USE AdventureWorks2012;  
    GO  
    EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;  
    

    または

    EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50;  
    GO  
    

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

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

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

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

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

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

    自動実行されるプロシージャは、固定サーバー ロール 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 を渡します。

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

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

Transact-SQL の使用

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

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

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

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

USE AdventureWorks2012;  
GO  
EXEC dbo.uspGetEmployeeManagers 6;  
GO  

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

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

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

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

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

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

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

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

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

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

例 (Transact-SQL)

参照

パラメーターの指定
scan for startup procs サーバー構成オプションの構成
EXECUTE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
ストアド プロシージャ (データベース エンジン)