创建 CLR 函数
适用于: SQL Server 2016 (13.x) 及更高版本
您可以在一个使用.NET Framework 公共语言运行时 (CLR) 创建的程序集进行编程的 SQL Server 实例中创建一个数据库对象。 可以充分使用公共语言运行时所提供的丰富的编程模式的数据库对象包括聚合函数、函数、存储过程、触发器以及类型。
在 SQL Server 中创建 CLR 函数分为下列几个步骤:
使用 .NET Framework 支持的语言将函数定义为类的静态方法。 有关如何在公共语言运行时中对函数进行编程的详细信息,请参阅 CLR 用户定义的函数。 然后,使用适当的语言编译器编译该类,在 .NET Framework 中生成程序集。
使用
CREATE ASSEMBLY
语句在 SQL Server 中注册程序集。 有关 SQL Server 中程序集的更多信息,请参阅 程序集(数据库引擎)。通过使用 CREATE FUNCTION 语句创建引用注册程序集的函数。
在 SQL Server 中,执行 CLR 代码会默认处于关闭状态。 可以创建、更改和删除引用托管代码模块的数据库对象,但这些引用不会在 SQL Server 上执行,除非使用 sp_configure启用 clr enabled 服务器配置选项。
在 Visual Studio 中部署 SQL Server 项目会注册为项目指定的数据库中的程序集。 部署项目还会在数据库中为所有使用 SqlFunction
属性注释的方法创建 CLR 函数。 有关详细信息,请参阅 部署 CLR 数据库对象。
访问外部资源
可以使用 CLR 函数访问外部资源,例如文件、网络资源、Web 服务和其他数据库(包括 SQL Server 的远程实例)。 CLR 函数可以在 .NET Framework 中使用各种类,例如 System.IO
、System.WebServices
、System.Sql
等。 至少应将包含此类函数的程序集配置为设置了 EXTERNAL_ACCESS
权限,才能实现此目的。 有关详细信息,请参阅 CREATE ASSEMBLY。
可以使用 SQL 客户端托管提供程序访问 SQL Server 远程实例。 但在 CLR 函数中不支持与发起服务器的环回连接。
在 SQL Server 中创建、修改或删除程序集
创建 CLR 函数
访问本机代码
通过使用托管代码中的 PInvoke
,可以使用 CLR 函数来访问本机(非托管)代码(如用 C 或 C++ 编写的代码)(有关详细信息,请参阅 从托管代码调用本机函数)。 可以将旧代码重用为 CLR UDF,或在本机代码中写入性能关键型 UDF,并且需要使用 UNSAFE
程序集。 请参阅 CLR 集成代码访问安全性,以了解有关使用 UNSAFE
程序集的警告。