ストアド プロシージャの実行
このトピックでは、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
修飾されていないユーザー定義のプロシージャを指定した場合、 データベース エンジン では次の順序でプロシージャが検索されます。
現在のデータベースの sys スキーマ。
バッチまたは動的 SQL で実行された場合は、呼び出し側の既定のスキーマ。 または、別のプロシージャ定義の本文の中に非修飾型プロシージャ名がある場合は、そのプロシージャを含んでいるスキーマが次に検索されます。
現在のデータベースの dbo スキーマ。
ストアド プロシージャの自動実行
自動実行としてマークされたプロシージャは、SQL Serverが開始されるたびに実行され、そのスタートアップ プロセス中にマスター データベースが復旧されます。 データベースのメンテナンス操作を実行する場合や、バックグラウンド プロセスとしてプロシージャを連続実行する場合は、自動実行するようにプロシージャを設定すると便利です。 プロシージャの自動実行は、グローバル一時テーブルの作成など、 tempdbのシステム タスクまたはメンテナンス タスクを行う場合にも使用できます。 これにより、起動時に tempdb が再作成されるときに、このような一時テーブルが常SQL Server存在します。
自動実行されるプロシージャは、固定サーバー ロール sysadmin と同じ権限で操作を行います。 これらのプロシージャが生成するエラー メッセージは、 SQL Server のエラー ログに書き込まれます。
スタートアップ プロシージャの数に制限はありませんが、実行中、プロシージャ 1 つにつき 1 つのワーカー スレッドが使用されます。 スタートアップ時に複数のプロシージャを実行する場合でも、並列に実行する必要がないときは 1 つのプロシージャをスタートアップ プロシージャとし、そのプロシージャが残りのプロシージャを呼び出すようにします。 この場合は、全体で 1 つのワーカー スレッドしか使用されません。
ヒント
自動実行されるプロシージャからは、結果セットを返さないでください。 自動実行されるプロシージャは、アプリケーションやユーザーではなく SQL Server が実行するので、結果セットを返す先がないためです。
自動実行の設定、解除、および制御
自動実行されるようにプロシージャを設定できるのは、システム管理者 (sa) だけです。 また、このプロシージャは、 master データベースに格納されていて、 saにより所有されている必要があり、入出力パラメーターを受け渡すことはできません。
次の操作を実行するには、 sp_procoption を使用します。
既存のプロシージャをスタートアップ プロシージャとして指定する。
SQL Server のスタートアップ時にプロシージャが実行されないようにする。
セキュリティ
詳細については、「EXECUTE AS (Transact-SQL)」および「EXECUTE AS 句 (Transact-SQL)」を参照してください。
アクセス許可
詳細については、「EXECUTE (Transact-SQL)」の "アクセス許可" のセクションを参照してください。
SQL Server Management Studio を使用する
ストアド プロシージャを実行するには
オブジェクト エクスプローラーで、 SQL Server データベース エンジンのインスタンスに接続して、そのインスタンスを展開します。次に、 [データベース] を展開します。
目的のデータベースを展開し、 [プログラミング] を展開します。次に、 [ストアド プロシージャ] を展開します。
目的のユーザー定義のストアド プロシージャを右クリックし、 [ストアド プロシージャの実行] をクリックします。
[プロシージャの実行] ダイアログ ボックスで、各パラメーターの値と、null 値を渡すかどうかを指定します。
パラメーター
パラメーターの名前を示します。[データ型]
パラメーターのデータ型を示します。[出力パラメーター]
これが出力パラメーターかどうかを示します。[NULL 値を渡す]
パラメーターの値として NULL を渡します。Value
プロシージャを呼び出すときのパラメーターの値を入力します。ストアド プロシージャを実行するには、 [OK] をクリックします。
Transact-SQL の使用
ストアド プロシージャを実行するには
データベース エンジンに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。 この例は、1 つのパラメーターを受け取るストアド プロシージャを実行する方法を示します。 この例では、
uspGetEmployeeManagers
パラメーターとして指定された値6
を使用してストアド プロシージャを@EmployeeID
実行します。
USE AdventureWorks2012;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
プロシージャの自動実行を設定または解除するには
データベース エンジンに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。 この例は、 sp_procoption を使用してプロシージャの自動実行を設定する方法を示しています。
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionName = ] 'startup'
, @OptionValue = 'on';
プロシージャの自動実行を解除するには
データベース エンジンに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。 この例は、 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)
ストアド プロシージャ (データベース エンジン)