我想为SQL Server创建基于SQLCLR的存储过程。如您所知,我可以针对多个版本的.NET框架构建一个DLL。我无法找到描述哪个版本的SQL Server支持哪个版本的.NET框架的参考。任何人都可以帮我指出正确的方向吗?
答案 0 :(得分:24)
要明确的是,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版本与Framework版本关系的图表,请参阅.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]。
关于从System.Environment.Version
(在.NET代码中)和SELECT [version] FROM sys.dm_clr_properties;
返回的信息,他们报告 CLR 版本,不是 .NET Framework 版本。因此,请注意不要将报告2.0或4.0的两件事混淆为意味着您只能使用Framework 2.0或4.0版。
幸运的是,由于向后兼容性,针对CLR 2 Framework版本(2.0,3.0和3.5)编译的代码将无需在SQL Server 2012及更高版本中重新编译,即使它们位于CLR版本4上。
因此,使用Target Framework Version 2.0时通常不会出错,但是你肯定可以使用超过2.0的Framework版本。
要更深入地了解开发SQLCLR代码,请查看我写的以下文章(以及一般系列文章):
Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)
有关使用SQLCLR的更多信息,请访问:SQLCLR Info