sql-server - SQL Server 支持哪个版本的 .NET 框架?

标签 sql-server sqlclr .net-framework-version

我想为 SQL Server 创建基于 SQLCLR 的存储过程。如您所知,我可以针对多个版本的 .NET 框架构建 dll。我找不到描述哪个版本的 SQL Server 支持哪个版本的 .NET 框架的引用。谁能帮我指出正确的方向?

最佳答案

需要明确的是,单个版本的 CLR 通常具有与其一起使用的多个版本的 .NET Framework。但是,单个版本的 .NET Framework 仅适用于一个特定版本的 CLR。例如,CLR 2.0 版适用于 .NET Framework 2.0、3.0 和 3.5 版,而 CLR 4.0 版适用于 .NET Framework 的所有 4.x 版本(即 4.0、4.5[.x]、4.6[. x]、4.7[.x] 等)。要查看 CLR 版本与框架版本关系的图表,请参阅 .NET Framework Versions and Dependencies 的 MSDN 页面。 .
对于 SQLCLR 代码,SQL Server 只适用于单一版本的 CLR,具体版本取决于 SQL Server 的版本。 SQL Server 2005、2008 和 2008 R2 仅适用于 CLR 版本 2。由于 CLR 版本 2 仅适用于 .NET Framework 版本 2.0、3.0 和 3.5,这意味着 SQL Server 2005、2008 和 2008 R2 仅适用于 . NET Framework 2.0、3.0 和 3.5 版。
当然,SQL Server 2005 的 CLR 集成功能(它的初始版本)是围绕 .NET Framework 2.0 版构建的(因为当时可用),因此 .NET Framework 3.0 版中有几个较新的库和 3.5 在没有手动导入的情况下在 SQL Server 2005 中不起作用(即 System.Core System.Xml.Linq )。同样,SQL Server 2012、2014、2016、2017 和 2019 静态链接到 CLR 版本 4,该版本适用于 .NET Framework 版本 4.0、4.5[.x]、4.6[.x] 和 4.7[。 X]。
如果它更容易理解,上面提到的图表形式的信息是:

SQL Server version      |   CLR version   |   .NET Framework version(s)
------------------------|-----------------|----------------------------
2005                    |   2.0           |   2.0, 3.0 **, and 3.5 **
                        |                 | ** To use any functionality within
                        |                 |    System.Core or System.Xml.Linq
                        |                 |    libraries, they must be imported
                        |                 |    manually as UNSAFE.
------------------------|-----------------|----------------------------
2008 and 2008 R2        |   2.0           |   2.0, 3.0, and 3.5
------------------------|-----------------|----------------------------
2012, 2014, 2016, 2017, |   4.0           |   4.0+
and 2019, (and should   |                 |
also be Azure SQL DB    |                 |
Managed Instance)       |                 |
------------------------|-----------------|----------------------------
关于从System.Environment.Version返回的信息(在 .NET 代码中)和 SELECT [value] FROM sys.dm_clr_properties WHERE [name] = N'version'; ,他们正在报告 CLR 版本,而不是 .NET 框架 版本。因此,请注意不要将报告 2.0 或 4.0 的这两件事混淆,因为这意味着您只能使用 Framework 2.0 或 4.0 版。
幸运的是,由于向后兼容性,针对 CLR 2 框架版本(2.0、3.0 和 3.5)编译的代码将无需在 SQL Server 2012 和更高版本中重新编译即可运行,即使它们是在 CLR 版本 4 上。
因此,使用 2.0 的目标框架版本通常不会出错,但您肯定可以使用 2.0 以上的框架版本。
要更深入地了解开发 SQLCLR 代码,请查看我撰写的以下文章(以及整个系列):
Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)
有关使用 SQLCLR 的更多信息,请访问:SQLCLR Info

关于sql-server - SQL Server 支持哪个版本的 .NET 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41114147/

相关文章:

sql-server - 在用户定义类型上创建表方法(如 XML 数据类型上的 'nodes')

sql-server - 反转 T-SQL 中的单词顺序

.net - 缺少 “ASP.NET Core Web Application (.NET Framework)” 模板

asp.net-mvc - 具有多个用户存储的 Identity Server 4

sql-server - 如何在 Transact SQL 中获取字符串中的字符数, "other way"

sql - SSMS - MYSQL Server 查询选项设置为开/关以短日期格式显示所有列?

javascript - 如何使用 Angular 版本 2 和 Node JS 连接到 MSSQL 数据库

sql-server - 列出所有索引

c# - VS 2019 升级后无法调试 .NET

.net - 尽管在另一种情况下完全相同的输入工作,AzureBlobStorageContainer FetchAttributes() 仍抛出错误