创建 CLR 函数

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

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

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

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

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

注意注意

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

注意注意

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

访问外部资源

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

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

创建 CLR 函数

访问本机代码

可以通过从托管代码中使用 PInvoke,使用 CLR 函数来访问本机(非托管)代码,如用 C 或 C++ 编写的代码(有关详情,请参阅从托管代码调用本机函数)。这样,您就可以重新将旧代码用作 CLR UDF,或在本机代码中使用性能关键的 UDF。这要求使用 UNSAFE(非安全)程序集。有关使用 UNSAFE 程序集的注意事项,请参阅 CLR 集成代码访问安全性