适用于: SQL Server 2019 (15.x) 及更高版本
了解如何为 Windows 上的 SQL Server 安装 .NET 语言扩展组件(被 C# 使用)。 .NET 语言扩展是 SQL Server 语言扩展的一部分。
注意
本文适用于在 Windows 上安装 SQL Server 的 .NET 语言扩展。 不支持 Linux。
先决条件
注意
功能和安装选项因 SQL Server 版本而异。 使用版本选择器下拉列表选择适当版本的 SQL Server。
- 如果要安装针对 .NET 语言扩展的支持,则需要 SQL Server 安装程序。 
- .NET 语言扩展支持 .NET 6 及更高版本的运行时,并且仅在 Windows 上受支持。 
- 需要数据库引擎实例。 尽管可以将 .NET 语言扩展功能以增量方式添加到现有实例中,但无法只安装该功能。 
- 为实现业务连续性,语言扩展支持 Always On 可用性组。 必须在每个节点上安装语言扩展并配置包。 还支持在 SQL Server 中的故障转移群集实例上安装 .NET 语言扩展。 
- 请勿在域控制器上安装 SQL Server 语言扩展或 .NET 语言扩展。 安装程序的语言扩展部分失败。 
- 默认情况下,语言扩展和机器学习服务安装在 SQL Server 大数据群集上。 如果使用大数据群集,则无需按照本文中的步骤进行操作。 有关详细信息,请参阅通过机器学习服务在 SQL Server 2019 大数据群集上运行 Python 和 R 脚本。 
重要
安装完成后,请务必完成本文中所述的配置后步骤。 这些步骤包括使 SQL Server 能够使用外部代码,以及添加 SQL Server 代表你运行 C# 代码所需的帐户。 配置更改通常需要重启实例或重启 Launchpad 服务。
.NET 运行时
.NET 6 长期支持 (LTS) 是最早支持的运行时。 可以下载适用于 Windows 的 .NET 运行时。 不支持 Linux。
如果你要使用 .NET 运行时的最新 LTS 版本,则必须重新编译 .NET 语言扩展。
获取安装介质
SQL Server 的下载位置由版本决定:
- SQL Server Enterprise、Standard 和 Express 版本。 这些版本已获得生产使用许可。 如需 Enterprise 和 Standard 版本,请联系软件供应商获取安装媒体。 你可以在 Microsoft 采购网站上找到采购信息和 Microsoft 合作伙伴目录。 
运行安装程序
对于本地安装,必须以管理员身份运行安装程序。 如果从远程共享安装 SQL Server ,则必须使用对远程共享具有读取和执行权限的域帐户。
- 启动 SQL Server 的安装向导。 
- 在“安装”选项卡上,选择“全新 SQL Server 独立安装或向现有安装添加功能” 。 
- 在“功能选择” 页上,选择以下选项: - 数据库引擎服务:要将语言扩展与 SQL Server 结合使用,必须安装数据库引擎的实例。 可使用默认实例或命名实例。 - 机器学习服务和语言扩展:此选项将安装支持 C# 代码执行的语言扩展组件。 
- 在“准备安装”页面上,验证是否已包括这些选择,然后选择“安装” 。 - 数据库引擎服务
- 机器学习服务和语言扩展
 - 请注意配置文件存储路径 - ..\Setup Bootstrap\Log下的文件夹位置。 安装完成后,可以在“摘要”文件中查看已安装的组件。
- 安装完成后,如果收到重启计算机的指示,请立即重启。 安装完成后,请务必阅读安装向导中的消息。 有关详细信息,请参阅 “查看和读取 SQL Server 安装程序日志文件”。 
注册语言扩展
- 按照以下步骤下载并注册 .NET 语言扩展,该扩展用于运行 C# 代码。 - 从 - dotnet-core-CSharp-lang-extension-windows-release.zip下载 文件。 下载最新的 Windows- dotnet-core-CSharp-lang-extension-windows-release.zip文件。 如果你想要使用较新的 .NET 运行时,则需要从 GitHub 源代码编译- dotnet-core-CSharp-lang-extension。
- 使用 SQL Server Management Studio (SSMS) 或 Azure Data Studio 连接到 SQL Server 实例,并运行以下 Transact-SQL (T-SQL) 命令,以便使用 CREATE EXTERNAL LANGUAGE 注册 .NET 语言扩展。 
- 修改此语句中的路径,以反映下载的语言扩展 zip 文件 ( - dotnet-core-CSharp-lang-extension-windows-release.zip) 的位置。
 - CREATE EXTERNAL LANGUAGE [dotnet] FROM (CONTENT = N'C:\path\to\dotnet-core-CSharp-lang-extension-windows-release.zip', FILE_NAME = 'dotnetextension.dll'); GO
- 重启 Launchpad。 
- 在“SQL Server 服务”下,右键单击“SQL Server Launchpad”,然后选择“重启” 。 
 
重新启动服务。
安装完成后,请先重启数据库引擎,然后再继续执行下一步,以启用脚本执行。
重启 SQL Server 服务也会自动重启相关的 SQL Server Launchpad 服务。
可以使用 SSMS 中实例的右键单击“重启”命令、“控制面板”中的“服务”面板,或者使用 SQL Server 配置管理器来重启服务。
启用脚本执行
- 打开 SQL Server Management Studio。 连接到已安装语言扩展的实例,选择“新建查询”以打开查询窗口,并运行以下命令: - EXECUTE sp_configure;- 此功能默认处于关闭状态( - value为- 0),必须在管理员显式启用此功能后,才能运行 C# 代码。
- 若要启用外部脚本编写功能,请运行以下语句: - EXECUTE sp_configure 'external scripts enabled', 1; GO RECONFIGURE WITH OVERRIDE; GO- 如果已为机器学习服务启用此功能,请勿再次为语言扩展运行重新配置。 基础扩展性平台支持这两种方法。 
注册外部语言
对于想要在其中使用语言扩展的每个数据库,需要使用 CREATE EXTERNAL LANGUAGE 注册外部语言。
以下示例将一种名为 dotnet 的外部语言添加到 Windows 上的 SQL Server 的数据库中。
CREATE EXTERNAL LANGUAGE [dotnet]
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'dotnetextension.dll');
GO
有关详细信息,请参阅 CREATE EXTERNAL LANGUAGE。
验证安装
在安装程序日志中检查实例的安装状态。
使用以下步骤验证用于启动外部脚本的所有组件是否都在运行。
- 在 SQL Server Management Studio 或 Azure Data Studio 中打开新的查询窗口,然后运行以下语句: - EXECUTE sp_configure 'external scripts enabled';- run_value现已设置为- 1。
- 打开“服务”面板或 SQL Server 配置管理器,并验证“SQL Server Launchpad”是否正在运行 。 应有一项服务适用于已安装语言扩展的每个数据库引擎实例。 有关该服务的更多信息,请参阅 SQL Server 语言扩展中的扩展性体系结构。 
其他配置
如果验证步骤成功,则可以从 SQL Server Management Studio、Azure Data Studio、Visual Studio Code 或者能够向服务器发送 T-SQL 语句的其他任何客户端运行 C# 命令。
如果在运行命令时遇到错误,请查看本部分中的其他配置步骤。 可能需要对服务或数据库进行其他适当配置。
在实例级别,其他配置可能包括:
数据库上可能需要以下配置更新:
注意
是否需要其他配置取决于安全架构、SQL Server 的安装位置,以及期望用户以何方式连接到数据库和运行外部脚本。
建议的优化
一切正常运行后,可能还需要优化服务器以支持 .NET 语言扩展。
针对 .NET 语言扩展优化服务器
SQL Server 安装程序的默认设置旨在为数据库引擎支持的各种服务(可能包括提取、转换和加载 (ETL) 进程、报告、审核和使用 SQL Server 数据的应用程序)优化服务器平衡。 因此,在默认设置下,可能会发现语言扩展(尤其是占用大量内存的操作)的资源有时被限制或被阻止。
若要确保语言扩展作业的优先级别并为其分配相应资源,建议使用 SQL Server Resource Governor 配置外部资源池。 可能还想要更改分配到数据库引擎的内存量,或增加 SQL Server Launchpad 服务下运行的帐户数。
- 要配置用于管理外部资源的资源池,请参阅创建外部资源池 (Transact-SQL)。 
- 若要更改为数据库保留的内存量,请参阅服务器内存配置选项。 
如果使用的是 Standard edition 且没有 Resource Governor,则可以使用动态管理视图 (DMV) 和扩展事件以及 Windows 事件监视来帮助管理服务器资源。
下一步
C# 开发人员可以开始使用一些简单的示例,并了解 C# 如何与 SQL Server 协同工作的基础知识。 有关下一步,请参阅以下链接:
