0

このような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内で呼び出す非同期関数の作成を手伝ってください。

ありがとう

4

1 に答える 1