2011-06-21 8 views
2

これを実行するビューまたは内部SPはありますか?SQL Server 2008 R2でストアドプロシージャが実行されているかどうかを検出する方法

たとえば、私はsp spGoesOnForSomeTimeを持っています。

私はこれを蹴って、いくつかの個人がコンピュータを閉じると、これがまだ実行中であるかどうかをどのように確認できますか?

私はSQLプロファイラとActivityMonitorを使用することができますが、私は最終的にこの情報をウェブアプリケーションを介して中継したいと考えています。

EDIT:申し訳ありませんが、ローカル接続ではありません。

答えて

1
を継続していきます

ローカル接続で実行されている場合、停止してロールバックするので、ではなく、が実行されていることが確信できます。

別の接続のコンテキストで実行している場合は、sp_whoストアドプロシージャを使用してサーバー上のすべてのアクティビティ(アクティブな接続)を表示できます。cmd列にはコマンドが表示されます。いずれかのレコードのプロシージャ名がcmd列にある場合は、実行中であることが示されます。

ただし、プロシージャの開始時に、より意図的なアプローチをとり、何らかの種類のフラグ(別のテーブルの行の値、データベースまたはプロシージャの拡張プロパティなど)を設定することができます。手順が終了したらリセットしてください。これは、プロシージャが別のプロシージャ内から呼び出されるシナリオも考慮に入れます。

+0

あなたに綴られているシンプル!私はすでに始まり/終わりの時間を持っています。私はただの道具であり、トウとトウを一緒にまとめることができませんでした。 –

1

ローカルのManagement Studioから実行している場合は、SSMSが終了すると接続が切断(クローズ)されます。

すべてのトランザクションがロールバックされ、すべてのロックが解放されます。あなたはいくつかの巨大なデータ変更の真ん中にいる場合は、あなたのprocが実行を停止し、接続がまだ閉じられているが、ロールバックはとにかく

だから、与えられた事実に基づいてチェックする必要はありません...

+1

誤解を招くような情報にはご迷惑をおかけします。 –

0

これがアプリケーション要件の一部である場合、このストアドプロシージャへのすべての呼び出しの開始と終了をログに記録し、それに対してビューを表示してストアドプロシージャのインスタンスが現在実行中であることを示します。

データベースのメンテナンス用の場合は、sp_whoまたはsp_who2を使用します。

EDIT: 実は、sp_whosp_who2は、おそらくあなたの現在実行中のコマンド、必ずしもストアドプロシージャ名自体が表示されます。システムダイナミックビューsys.dm_exec_sql_textを試すことができますが、必ずしも正確であるとは限りません。

+0

Tomにスポット。正しい方向を指してくれてありがとう。 –

0

SqlServerAgentを使用しているか、または単にMgmt Studioを使用しているかによって異なります。

@ gbnが言ったように、一度切断すると、その接続を使用している作業も停止します。

スケジュールされたジョブを作成すると、接続とは独立しています。

関連する問題