sql >> データベース >  >> RDS >> Sqlserver

SQLServerストアドプロシージャからWebサービスを呼び出す方法

    このような場合、完全なWebサービスの実装は必要ありません。 SQLCLR(SQL Serverの.NET統合)を使用して、要求をURLに送信し、応答をXMLで取得できます(なしで機能するJSONライブラリが見つからない場合 UNSAFEに設定されています )、次にその応答を解析します。

    次のMSDNページをご覧ください。

    • HttpWebRequest
    • HttpWebResponse
    • XmlDocument
    • アドレスをエスケープするには:
      • SQL Server 2005、2008、または2008 R2を使用している場合は、 Uri.EscapeDataString .NETFrameworkv4.5より前に利用可能だったため
      • SQL Server 2012、2014以降を使用している場合は、Uri.EscapeDataStringを使用できます。サーバーが、少なくとも.NET Framework v4.5に更新されている場合は、代わりに WebUtility.UrlEncode

    GoogleGeocodingAPIドキュメント によると 、APIURIは次のようにフォーマットする必要があります。

    https://maps.googleapis.com/maps/api/geocode/xml?address={EscapedAddress}&key={API_KEY}
    

    HttpWebRequestを介して、これら2つの変数を適切な値に置き換えて送信するだけです。 、次にHttpWebRequest.GetResponseを呼び出します 、次にHttpWebResponse.GetResponseStreamを呼び出します 。そして、しない Closeを呼び出すのを忘れてください およびDispose HttpWebResponseのメソッド (またはusingでインスタンス化します ブロック)!!

    追記:

    • まだ行っていない場合は、サーバーレベルで「CLR統合」を(1回)有効にする必要があります。CLR統合の有効化
    • 簡単な方法でデータベースをTRUSTWORTHY ONに設定しないでください。 。パスワードを使用してアセンブリに署名し、masterで非対称キーを作成するだけです。 署名されたDLLをポイントしてデータベースを作成し、その非対称キーからログインを作成し、最後にそのログインにUNSAFE ASSEMBLYを付与します。 許可。次に、アセンブリをWITH PERMISSION_SET = EXTERNAL_ACCESSで設定できます。 。
    • SP_OA*プロシージャをuser3469363が推奨する として使用しないでください。 。これらのOLEオートメーション手順は、SQL Server 2005以降非推奨になっており、(願わくば)いつか(願わくばすぐに)削除される予定です。また、SQLCLRよりも効率が低く、安全性も低くなります。
    • DBA.StackExchangeの同様の質問に対する私の回答には、さらに多くのメモがあります。 WebサービスデータをSQLサーバーに取り込む


    1. PostgresのCTEとサブクエリのパフォーマンスの違い。なんで?

    2. MySQL接続がまだ生きているかどうかを判断するための最も安価な方法

    3. SchrödingersMySQLテーブル:存在しますが、存在しません

    4. date_formatを含むSQLステートメントでのパラメーターの使用