解决方法
关于sqlCLR代码,sql Server仅适用于单个版本的CLR,特定版本取决于sql Server的版本. sql Server 2005,2008和2008 R2仅适用于CLR版本2.由于CLR版本2仅适用于.NET Framework版本2.0,这意味着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静态链接到CLR版本4,它适用于.NET Framework版本4.0,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)