如何在 SQL Server 语言扩展中调用 .NET 运行时
适用于: SQL Server 2019 (15.x) 及更高版本
SQL Server 语言扩展功能使用 sp_execute_external_script 系统存储过程作为接口来调用 .NET 运行时。
本操作说明文章介绍了在 SQL Server 上执行的 C# 代码的实现详细信息。
放置 C# 类的位置
可以通过使用外部库 DDL 将已编译的 .NET 库 (DLL) 和其他依赖项上传到数据库中来调用 SQL Server 中的 C# 代码。 有关详细信息,请参阅从 C# 项目创建 .NET DLL。
基本原则
下面是在 SQL Server 上执行 C# 时的一些基本原则。
编译的自定义 .NET 类必须存在于 DLL 文件中。
所调用的 C# 方法必须在存储过程上的
script
参数中提供。如果类属于某个包,则必须提供
packageName
。params
用于将参数传递到 C# 类。 不支持调用需要参数的方法。 因此,形参是将实参值传递到方法的唯一方式。
注意
此说明重述了 SQL Server 2019 (15.x) 及更高版本中特定于 C# 的受支持和不受支持的操作。 在存储过程中,支持输入参数,而不支持输出参数。
调用 C# 代码
sp_execute_external_script 系统存储过程是用于调用 .NET 运行时的接口。 以下示例显示了使用 .NET 扩展的 sp_execute_external_script
以及用于指定路径、脚本和自定义代码的参数。
注意
无需定义要调用的方法。 默认情况下,会调用名为 Execute
的方法。 这意味着需要遵循 SQL Server 用于 C# 的 Microsoft 扩展性 SDK,并在 C# 类中实现 Execute
方法。
DECLARE @param1 INT;
SET @param1 = 3;
EXEC sp_execute_external_script
@language = N'dotnet',
@script = N'<PackageName>.<ClassName>',
@input_data_1 = N'<Input Query>',
@param1 = @param1;
使用外部库
在 SQL Server 2019 (15.x) 及更高版本中,可以在 Windows 使用适用于 C# 语言的外部库。 可以使用 CREATE EXTERNAL LIBRARY DDL 将类编译到 DLL 文件中,并将 DLL 和其他依赖项上传到数据库中。
如何使用外部库上传 DLL 文件的示例:
CREATE EXTERNAL LIBRARY [dotnetlibrary]
FROM (CONTENT = '<local path to .dll file>')
WITH (LANGUAGE = 'dotnet');
GO
创建外部库时,SQL Server 将自动具有对 C# 类的访问权限,并且无需将任何特殊访问权限设置为路径。
以下代码是从上传为外部库的包 Execute
调用类 MyClass
中的 MyPackage
方法的示例:
EXEC sp_execute_external_script
@language = N'dotnet',
@script = N'MyPackage.MyClass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
有关详细信息,请参阅 CREATE EXTERNAL LIBRARY。