リモートWebサービスで計算を呼び出すSQLCLR関数としてテーブル値関数が構築されています。私はCROSS APPLY関数が関数を並行して呼び出すか、逐次的に呼び出すかどうか疑問に思っていましたか?SQLCLRテーブル値関数(TVF)で適用されるSQLクロス
計算をサポートするWebサービスが実際にスレッドセーフであるかどうかはわかりません。
クロス適用されたクエリ:
WITH listCTE AS
(
SELECT 'definition1' AS def UNION ALL
SELECT 'definition2' AS def UNION ALL
SELECT 'definition3' AS def
)
SELECT calc.*
FROM listCTE a
CROSS APPLY dbo.f_webservice_calculate (a.def,'2017-06-30') calc
SQLCLR TVF関数定義。
[SqlFunction(
Name = "f_webservice_calculate",
DataAccess = DataAccessKind.Read,
FillRowMethodName = "fillRowMethod",
SystemDataAccess = SystemDataAccessKind.Read
)]
public static IEnumerable f_webservice_calculate(string def, DateTime date)
{
...calling web service using HttpWebRequest
}
お返事ありがとうございます。 SQLCLR関数が複数ステートメントのテーブル値関数と見なされると思いますか?私の実際の実行計画(MAXDOP 1なし)は、あなたが投稿した記事によると、MTVF実行計画のように見えるテーブル値関数を呼び出すネストループです。 – Vincent