公共语言运行时集成

适用于:SQL ServerAzure SQL 托管实例

Microsoft SQL Server 和 Azure SQL 托管实例 使你能够使用本机公共语言运行时 (CLR) 集成实现 .NET 语言的某些功能,SQL Server服务器端模块 (过程、函数和触发器) 。 CLR 为托管代码提供服务,例如跨语言集成、代码访问安全性、对象生存期管理以及调试和分析支持。 对于SQL Server用户和应用程序开发人员来说,CLR 集成意味着你现在可以使用任何.NET Framework语言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)编写存储过程、触发器、用户定义类型、用户定义函数 (标量和表) 值聚合函数。 SQL Server包括预安装的 .NET Framework 版本 4。

警告

CLR 在 .NET Framework 中使用代码访问安全性 (CAS)(不可再作为安全边界)。 使用 PERMISSION_SET = SAFE 创建的 CLR 程序集可以访问外部系统资源、调用非托管代码以及获取 sysadmin 特权。 从 SQL Server 2017 (14.x) 开始,引入了名为 clr strict securitysp_configure 选项,以增强 CLR 程序集的安全性。 默认启用 clr strict security,并将 SAFEEXTERNAL_ACCESS 程序集与标记为 UNSAFE 的程序集同等对待。 可禁用 clr strict security 选项以实现后向兼容性,但不建议这样做。 Microsoft 建议所有程序集都通过证书或非对称密钥进行签名,且该证书或非对称密钥具有已在主数据库中获得 UNSAFE ASSEMBLY 权限的相应登录名。 有关详细信息,请参阅 CLR 严格安全性。 SQL Server 管理员还可以将程序集添加到数据库引擎应信任的程序集列表。 有关详细信息,请参阅 sys.sp_add_trusted_assembly

此 6 分钟的视频演示如何在Azure SQL 托管实例中使用 CLR:

何时使用 CLR 模块

CLR 集成使你能够实现.NET Framework中提供的复杂功能,例如正则表达式、用于访问外部资源 (服务器的代码、Web 服务、数据库) 、自定义加密等。服务器端 CLR 集成的一些优势包括:

  • 更好的编程模型。 .NET Framework语言在许多方面都比 Transact-SQL 更丰富,提供以前SQL Server开发人员无法使用的构造和功能。 开发人员还可以利用 .NET Framework 库的功能,它提供了大量可用于快速有效地解决编程问题的类。

  • 改进了安全和安全性。 托管代码在数据库引擎承载的公共语言运行时环境中运行。 SQL Server利用此功能为早期版本的 SQL Server 中提供的扩展存储过程提供更安全、更安全的替代方法。

  • 能够定义数据类型和聚合函数。 用户定义的类型和用户定义的聚合是两个新的托管数据库对象,用于扩展SQL Server的存储和查询功能。

  • 通过标准化环境简化了开发。 数据库开发已集成到 Microsoft Visual Studio .NET 开发环境的未来版本中。 开发人员在开发和调试数据库对象和脚本时所使用的工具与他们编写中间层或客户端层的 .NET Framework 组件和服务时所使用的工具相同。

  • 具备改善性能和可伸缩性的潜力。 在多数情况下,.NET Framework 语言编译和执行模型通过 Transact-SQL 提高性能。

SQL Server语言扩展为靠近数据库引擎的运行时提供替代执行环境。 有关 SQL CLR 和 SQL 语言扩展之间的差异的讨论,请参阅将 SQL Server 语言扩展与 SQL CLR 进行比较

下表列出了本节的主题。

CLR 集成的概述
描述可以使用 CLR 集成生成的对象类型。 此外,查看使用 CLR 集成生成数据库对象的要求。

CLR 集成中的新增功能
介绍此发行版的新功能。

CLR 集成体系结构
介绍 CLR 集成的设计目标。

启用 CLR 集成
介绍如何启用 CLR 集成。

另请参阅

安装.NET Framework (SQL Server)
CLR 集成的性能