このようなCLR関数を作成しました
public class GETJSONFROMURL
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString GETData(SqlString URL)
{
SqlString Data = "N/A";
using (var webClient = new System.Net.WebClient())
{
var json = webClient.DownloadString(new Uri(URL.ToString()));
// Now parse with JSON.Net
JObject o = JObject.Parse(json);
Data = (string)o["Data_results"]["MyData"];
}
return Data;
}
}
このようにSqlで関数を作成しました
CREATE ASSEMBLY GetDataURL
FROM 'C:\GETJSONFROMURL.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
CREATE FUNCTION GetDataURL (@URL NVARCHAR(MAX))
RETURNS NVARCHAR(MAX) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME GetDataURL.GETJSONFROMURL.GETData
クエリ ウィンドウでこの関数を選択すると、0.03 秒未満で非常に高速に結果が得られます
SELECT [dbo].[GetDataURL] ('http://www.Testserver.com/123')
しかし、この関数を複数の呼び出しとして呼び出すと、何かを挿入した後のトリガー内のように、結果を取得するための遅延が発生します。
複数の呼び出しが結果を返すための遅延を取得しなかったため、SQL内で呼び出す非同期関数の作成を手伝ってください。
ありがとう