gpt4 book ai didi

sql-server - SQL CROSS APPLY 与 SQLCLR 表值函数 (TVF)

转载 作者:行者123 更新时间:2023-12-04 01:40:30 26 4
gpt4 key购买 nike

我有一个作为 SQLCLR 函数构建的表值函数,它调用远程 Web 服务上的计算。我想知道 CROSS APPLY 函数是并行调用函数还是顺序调用函数?

我不确定支持计算的网络服务是否真的是线程安全的。

交叉应用查询:

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
}

最佳答案

我不确定 CROSS APPLY 是否可以并行,但如果您需要确保它不能,您可以通过添加 强制查询保持单线程>OPTION (MAXDOP 1) 到查询的底部。

此外,关于通过 SQLCLR 调用 Web 服务,请参阅我在以下答案中提到的建议,尤其是关于 ServicePointManager 和仅 2 的默认并发连接限制 如果您不想无意中在查询中引入比您已经通过调用外部资源所做的更大的瓶颈,则需要手动增加:

SQL CLR Web Service Call: Limiting Overhead

关于sql-server - SQL CROSS APPLY 与 SQLCLR 表值函数 (TVF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com