sp_oacreate を使用して Web サービスを呼び出しています。Web サービスは、データベースからクエリされた文字列を出力するだけです。シーケンスは次のとおりです。
- sp_oacreate -> MSXML2.XMLHTTP のインスタンスを作成
- sp_omethod -> 接続を開く
- sp_oamethid -> 送信
- sp_omethod -> 応答テキストを取得
- sp_oadestory -> 作成されたオブジェクトのメモリを解放
データベース内のデータを変更して、Web サービスの呼び出し中に変更が反映されているかどうかを確認しようとしましたが、出力は最初の実行から常に同じです。sp_oadestroy が実際にメモリを解放できなかったか、キャッシュを使用しているようです。メモリの問題?
詳しく説明すると、サンプルの実行と出力は次のとおりです。
- 更新されたデータベース: 1,2,3,4
- 最初の実行出力: 1,2,3,4
- 更新されたデータベース: 1,2,3,4,5
- 2 回目の実行出力: 1,2,3,4
- ....同じ出力で同じように
これにはCLRが最適ですが、CLRはSQL2000では使用できないため、代替手段ではありません。そして、SQL2000 で実際にこれを行う必要があるとしましょう。ホットフィックスまたはパッチ? たとえば、管理者が許可したりリスクを冒したりしないとしましょう (これについてこれ以上の質問はありません:D)
この問題に光を当ててください。どうもありがとう!
コードの一部を次に示します。
SET @url = 'http://url_showtext.php?val1=1&val2=2'
EXEC sp_OACreate 'MSXML2.XMLHTTP', @object OUT
EXEC sp_OAMethod @object, 'open', NULL,'get', @url, 'false'
EXEC sp_OAMethod @object, 'send'
EXEC sp_OAMethod @object, 'responseText', @ResponseText OUTPUT
EXEC sp_OADestroy @object
select @ResponseText
ところで、私が sp_oacreate を使用し、この Web サービスを sql 経由で呼び出す理由についてあまり質問したり嘲笑したりしないでください。私はそのようなものの多くを見てきましたが、それらは要点をつかむのに役立っていません。ありがとう!