6

問題を解決するための最善の方法を見つけるのに苦労しています。

テーブルの行の値が更新された後、そのテーブルの 2 つのフィールドをコンソール アプリケーションのパラメーターとして使用する必要があります。現時点では、テーブルにトリガーを設定xp_cmdshellし、パラメーターを使用してアプリケーションを実行することで、これを実現できます。ただし、コンソール アプリケーションの終了を待機している間にストアド プロシージャがハングしないように、これを非同期で行う必要があります。

多分私はこれについて間違った方法で進んでいます。

SQL Server 2008 を使用しています

編集 - Andriy Mによる回答は現在最高のようですが、コメントに記載されているように、これを「即座に」実現する方法が必要です。SPまたはトリガーからジョブを呼び出すことはできますか? または、同様の結果を達成する別の方法はありますか?

みんな助けてくれてありがとう。

編集 - より良い解決策を得るのに最も役立ったので、彼の答えを以下に選択しました。私がやったことは、更新された行を追跡する別のテーブルに対してクエリを実行するジョブを作成することでした。次に、更新する必要がある行がある場合、xp_cmdshell を使用して、指定されたパラメーターでアプリケーションを実行します。このソリューションは、これまでのところスムーズに機能しているようです。

4

4 に答える 4

5

アプリケーションをトリガーから直接実行することには、別の欠点があります。通常、複数の行が更新される可能性があるという事実に関係しています。トリガーでこれを考慮するには、おそらく、更新された行に対してループを構成し、それぞれに対して個別にアプリケーションを実行する必要があります。カーソルは通常、最後の手段と見なされますが、トリガー内のカーソルはさらにそうです。

このような状況では、トリガーによって入力された専用テーブルから更新された値を読み取る SQL エージェント ジョブを作成することを検討するでしょう。ジョブは引き続きカーソルを使用する必要があると思いますが、トリガーは使用しません。要点は、ジョブからアプリケーションを実行しても、メインの作業プロセスが停止しないことです。

于 2011-12-27T19:31:37.550 に答える
1

トリガーで、更新された行ごとに Service Broker キューにメッセージを入れます。キューからメッセージを処理するストアド プロシージャを記述します。ストアド プロシージャをキューのアクティブ化ストアド プロシージャとして設定します。

于 2011-12-27T23:39:54.673 に答える
0

プロセスをより詳細に制御できるため、CLR プロシージャを使用することをお勧めします。しかし、あなたはこれを行うことができxp_cmdshellます。

これを行うには、で呼び出すバッチ ファイルを作成しますxp_cmdshell。バッチ ファイル内で、STARTコマンドを使用して適切なパラメーターを指定してコンソール アプリケーションを開始します。これにより、プロセスが非同期的に起動されます。バッチ ファイルとxp_cmdshell呼び出しはすぐに返されます。

于 2011-12-27T19:18:13.740 に答える
0

xp_cmd_shell を使用してコンソール アプリケーションを呼び出すのではなく、拡張ストアド プロシージャ (DLL) を開発する必要があると思います。

于 2011-12-27T18:50:31.027 に答える