TSQL ストアド プロシージャまたは関数から Web サービスを呼び出す方法はありますか?
9 に答える
確かにできますが、これはひどい考えです。
Web サービスの呼び出しには任意の時間がかかり、ランダムに失敗する可能性があるため、その時点でネットワーク上でカウンターストライクのゲームがいくつプレイされているかによって、これにかかる時間を知ることはできません。
XML を作成し、リモート サーバーに HTTP 要求を送信し、リモート サーバーが XML を解析して応答を返すまでに、少なくとも 0.5 秒かかります。
INSERT INTO BLAH
Web サービスを起動する原因となったクエリを実行したアプリケーションは、それが終了するまで待機する必要があります。これが毎日のスケジュールされたタスクのようにバックグラウンドでのみ発生するものでない限り、アプリのパフォーマンスは爆発的に向上しますWeb サービスを呼び出すコードは SQL サーバー内で実行され、そのリソースを使い果たします。HTTP リクエストの待機に時間がかかるため、多くのリソースを使い果たすことになり、サーバーのパフォーマンスが再び低下します。
T-SQL コード自体ではなく、SQL Server 2005 以降では、基本的に .NET コードの関数である CLR ストアド プロシージャを記述し、使用するストアド プロシージャとして公開する機能を有効にしました。このための .NET フレームワークのほとんどは手元にあるので、これを介して Web サービスを使用できることがわかります。
ここで詳しく説明すると少し長くなりますが、このトピックに関するMSDN の記事へのリンクを次に示します。
以前のバージョンのSqlでは、拡張ストアドプロシージャまたはxp_cmdshellのいずれかを使用して、Webサービスをシェルアウトして呼び出すことができました。
これらのどちらもまともなアーキテクチャのように聞こえるわけではありませんが、時にはクレイジーなことをしなければならないこともあります。
埋め込まれた VB オブジェクトでそれを行うことができます。
まず、'MSXML2.XMLHttp' 型の VB オブジェクトを 1 つ作成し、この 1 つのオブジェクトをすべてのクエリに使用します (毎回再作成すると、パフォーマンスが大幅に低下することが予想されます)。
次に、そのオブジェクトといくつかのパラメーターを、オブジェクトで sp_OAMethod を呼び出すストアド プロシージャにフィードします。
不正確な例で申し訳ありませんが、簡単な Google 検索で vb-script メソッドの実行方法が明らかになるはずです。
--
しかし、CLR バージョンははるかに....はるかに簡単です。Web サービスの呼び出しに関する問題は、DB エンジンに追いつかないことです。追いつけないところに多くのエラーが発生します。
また、Web サービスでは毎回新しい接続が必要になることを忘れないでください。多様性が作用します。テーブルで関数呼び出しを処理するために 5000 のソケット接続を開きたくありません。それはルーニーです!
その場合、カスタム集計関数を作成し、THAT を引数として使用して Web サービスに渡す必要があります。これにより、結果セットが返されます...次に、それを照合する必要があります。データを取得するのは本当に厄介な方法です。
SQL 2000の互換性レベルを使用していて、clr統合を実行できない場合は、http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(Stored-Procedure)を参照してください。 -using-MSXML.aspx