次の方法で共有


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

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

ストアド プロシージャを実行する方法は 2 つあります。 最初に最も一般的な方法は、アプリケーションまたはユーザーがプロシージャを呼び出す方法です。 2 番目の方法は、SQL Server のインスタンスの起動時に自動的に実行されるようにプロシージャを設定することです。 プロシージャがアプリケーションまたはユーザーによって呼び出されると、Transact-SQL EXECUTE キーワードまたは EXEC キーワードが呼び出しで明示的に指定されます。 または、プロシージャが 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 スキーマ名でスキーマ修飾することをお勧めします。 次の例は、システム プロシージャを呼び出す推奨される方法を示しています。

    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 が起動するたびに実行され、そのスタートアップ プロセス中に マスター データベースが復旧されます。 プロシージャを自動的に実行するように設定すると、データベースメンテナンス操作を実行したり、プロシージャをバックグラウンドプロセスとして継続的に実行したりするのに役立ちます。 自動実行のもう 1 つの用途は、グローバル一時テーブルの作成など、 tempdb でシステムタスクまたはメンテナンスタスクを実行することです。 これにより、SQL Server の起動時に tempdb が再作成されるときに、このような一時テーブルが常に存在することが確認されます。

    自動的に実行されるプロシージャは、 sysadmin 固定サーバー ロールのメンバーと同じアクセス許可で動作します。 プロシージャによって生成されたすべてのエラー メッセージは、SQL Server エラー ログに書き込まれます。

    使用できるスタートアップ プロシージャの数に制限はありませんが、実行中に各プロシージャが 1 つのワーカー スレッドを使用することに注意してください。 起動時に複数のプロシージャを実行する必要があるが、並列で実行する必要がない場合は、1 つのプロシージャをスタートアップ プロシージャにし、そのプロシージャで他のプロシージャを呼び出します。 これにより、ワーカー スレッドが 1 つだけ使用されます。

    ヒント

    自動的に実行されるプロシージャから結果セットを返さないでください。 プロシージャはアプリケーションまたはユーザーではなく SQL Server によって実行されるため、結果セットを実行する場所はありません。

  • 自動実行の設定、クリア、および制御

    自動的に実行するプロシージャをマークできるのは、システム管理者 (sa) だけです。 さらに、プロシージャは sa が所有する master データベースに存在する必要があり、入力パラメーターまたは出力パラメーターを持つことはできません。

    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 ストアド プロシージャを実行します。

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)

こちらもご覧ください

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