我想为 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/