Mes*_*sut 20 sql sql-server sqlclr
我已经深入研究了SQL clr编程.不幸的是,我的第一次尝试很困难.我的C#汇编代码就是这样:
enter code here
public partial class FirstCLRRoutines
{
public static int GetCLRFrameworkMajorVersion()
{
return System.Environment.Version.Major;
}
}
Run Code Online (Sandbox Code Playgroud)
而SQL代码是:
USE master
GO
CREATE ASSEMBLY [Chapter2.FirstCLRRoutine]
FROM 'D:\projeler\SQL_CLR\SQL_CLR\bin\Debug\SQL_CLR.dll'
Run Code Online (Sandbox Code Playgroud)
但是我从MSSMSE收到此错误消息:
Msg 6218,Level 16,State 3,Line 1
CREATE ASSEMBLY for assembly'SQL_CLR'失败,因为程序集'SQL_CLR'验证失败.检查引用的程序集是否是最新的并且在数据库中是否可信(对于external_access或unsafe).CLR Verifier错误消息(如果有)将遵循此消息
hor*_*ace 36
我刚刚遇到了完全相同的问题.
这是一个旧页面,但首先是formost,最后,DLL 必须使用.NET 2.0构建.SqlServer 2005是使用.net 2.0构建的,因为它是编写时的最新版本.SqlServer 2008可能也有同样的问题.
DLL和SqlServer必须都引用相同的.NET framekwork版本.一旦我弄清楚这一点,我在2.0和shazam下创建了一个单独的项目!第一次完美的工作.
要查看您的sql server使用的.net版本:
select * from sys.dm_clr_properties
Run Code Online (Sandbox Code Playgroud)
接受的答案虽然似乎解决了OP的问题,但只是部分正确,并且对潜在原因提出了过于简单的解释,这可能会导致其他人在类似问题上走错方向.
接受的答案的问题是对.NET环境的误解,同样的误解也可以在问题本身中看到.在.NET中,CLR和Framework是两个独立的东西,每个都有自己的版本.
CLR(公共语言运行时)是执行托管代码的.这几乎不像框架那样经常更新..NET Framework是一组库,提供与特定版本的CLR交互的基本方法.
单个版本的CLR通常具有与其一起使用的框架的多个版本.但是,单个版本的Framework仅适用于CLR的一个特定版本.例如,CLR版本2.0适用于Framework版本2.0,3.0和3.5,而CLR版本4.0适用于.NET Framework的所有4.x版本(即4.0,4.5,4.5.1,4.5.2,4.6)等).若要查看CLR版本到Framework版本关系的图表,请参阅.NET Framework版本和依赖项的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只包含.NET Framework 2.0版,因此.NET Framework 3.0和3.5版中有一些较新的库在SQL Server 2005中无法运行而无需手动导入它们(即System.Core和System. Xml.Linq).同样,SQL Server 2012,2014和2016静态链接到CLR版本4,它与.NET Framework版本4.0,4.5,4.5.1,4.5.2,4.6一起使用.
至于从两个返回的信息System.Environment.Version(在问题)和sys.dm_clr_properties.version(在接受的答案),他们所报告的CLR版本,不是的框架版本.因此,请注意不要将报告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代码的更深入了解,请查看以下文章(以及一般的系列文章),我写道:
SQLCLR第5级的阶梯:开发(在SQL Server中使用.NET)