创建 CLR 函数

适用于:SQL Server 2016 (13.x) 及更高版本

可以在 SQL Server 实例中创建可在 Microsoft .NET Framework 公共语言运行时 (CLR) 中创建的程序集中进行编程的数据库对象。 可以充分使用公共语言运行时所提供的丰富的编程模式的数据库对象包括聚合函数、函数、存储过程、触发器以及类型。

在 SQL Server 中创建 CLR 函数分为下列几个步骤:

  • 使用 .NET Framework 支持的语言将函数定义为类的静态方法。 有关如何在公共语言运行时中对函数进行编程的详细信息,请参阅 CLR 用户定义函数。 然后,使用适当的语言编译器编译该类,在 .NET Framework 中生成程序集。

  • 使用 CREATE ASSEMBLY 语句在 SQL Server 中注册程序集。 有关 SQL Server 中程序集的更多信息,请参阅 程序集(数据库引擎)

  • 通过使用 CREATE FUNCTION 语句创建引用注册程序集的函数。

在 SQL Server 中,执行 CLR 代码会默认处于关闭状态。 可以创建、更改和删除将引用托管代码模块的数据库对象,但是不能在 SQL Server 中执行这些引用,除非使用 sp_configure (Transact-SQL) 启用了 clr enabled 选项。

在 Microsoft Visual Studio 中部署 SQL Server 项目将在为该项目指定的数据库中注册程序集。 部署项目时,还会在数据库中为使用 SqlFunction 属性注释的所有方法创建 CLR 函数。 有关详细信息,请参阅 Deploying CLR Database Objects

访问外部资源

可以使用 CLR 函数访问外部资源,例如文件、网络资源、Web 服务及其他数据库(包括 SQL Server 远程实例)。 这可以通过使用 .NET Framework 中的各种类(例如 System.IOSystem.WebServicesSystem.Sql 等)来实现。 至少应将包含此类函数的程序集配置为设置了 EXTERNAL_ACCESS 权限,才能实现此目的。 有关更多信息,请参阅 CREATE ASSEMBLY (Transact-SQL)。 可以使用 SQL 客户端托管提供程序访问 SQL Server 远程实例。 但在 CLR 函数中不支持与发起服务器的环回连接。

创建、修改或删除 SQL Server 中的程序集

创建 CLR 函数

访问本机代码

通过使用托管代码中的 PInvoke,可以使用 CLR 函数来访问本机(非托管)代码(如用 C 或 C++ 编写的代码)(有关详细信息,请参阅 从托管代码调用本机函数)。 这样就可以重新将旧代码用作 CLR UDF,或在本机代码中使用性能关键的 UDF,并且需要使用 UNSAFE 程序集。 有关使用 UNSAFE 程序集的注意事项,请参阅 CLR Integration Code Access Security

另请参阅