SQL 服务器语言扩展性能

SQL Server language extension performance

SQL 服务器语言扩展函数在外部进程中执行。这是否意味着当在 Select 子句中调用这样的函数时,它会为应用它的记录集中的每一行创建一个新进程?

我认为您混淆了两种不同的功能/技术。

  • SQLCLR 是 运行 .NET 代码(通常是 C# 或 VB.NET,但有时是 Visual C++,偶尔是 F#,尽管 F# 不受官方支持) SQL 服务器进程中。这段代码可以被称为存储过程、触发器、标量函数、table-valued 函数、聚合函数,甚至 user-defined 类型。这具有在调用会话中执行 T-SQL 的能力,即使存在活动事务(即真正的 in-process 执行)。

  • 外部脚本(语言扩展) 比 SQLCLR 更新并且不是 .NET-specific。可以使用的语言有:R、Python、Java 和最近的 C#。这段代码只能通过sp_execute_external_script存储过程执行;没有通过函数调用这些外部脚本的选项。因此,没有 per-row 执行的概念。这些脚本由单独的服务(即外部)执行,因此没有 in-process T-SQL 代码执行的选项(意思是:通过外部脚本执行 T-SQL 将作为单独的会话连接).

更多详细信息可以在我的 post:
中找到 SQLCLR vs SQL Server 2017, Part 8: Is SQLCLR Deprecated in Favor of Python or R (sp_execute_external_script)?