【发布时间】:2015-03-05 21:23:04
【问题描述】:
我正在尝试使用 Visual Studio 2010 和 SQL Server 2012 创建一个简单的 CLR 用户定义函数。它构建得很好,但是当我尝试调试时出现此错误:
SqlClr部署:
开始将程序集 CCOMM_CLR.dll 部署到服务器 Titan:CBMAPP_REMAS
如果部署为与 SQL Server 目标实例不兼容的 .NET Framework 版本构建的 SQL CLR 项目,则可能会出现以下错误:“部署错误 SQL01268:为程序集创建程序集失败,因为程序集验证失败”。要解决此问题,请打开项目的属性,然后更改 .NET Framework 版本。 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlClr.targets(96,5):部署错误 SQL01234:不支持数据库版本。构建失败
那么...如何在它自己的机器上构建和部署...这是安装程序集和 UDF 的代码
CREATE ASSEMBLY CCOMM_CLR
FROM 'E:\SQL\ASSEMBLIES\CCOMM_CLr.dll' WITH PERMISSION_SET = SAFE;
CREATE FUNCTION HelloXP(@Name nvarchar )
Returns nvarchar
As EXTERNAL NAME CCOMM_CLR.UserDefinedFunctions.HelloWorld;
这是整个UDF
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString HelloWorld(SqlString theName)
{
// Put your code here
return "Hello " + theName;
}
};
程序集和 UDF 的安装工作正常,但是当我运行它时...
Select Master.dbo.HelloXP('Chris')
我收到此错误
消息 6522,第 16 级,状态 2,第 2 行
在执行用户定义的例程或聚合“HelloXP”期间发生 .NET Framework 错误:System.Data.SqlServer.TruncationException:尝试将大小为 14 字节的返回值或输出参数转换为具有较小大小限制的 T-SQL 类型2 个字节。
System.Data.SqlServer.TruncationException:
在 System.Data.SqlServer.Internal.CXVariantBase.StringToWSTR(String pstrValue, Int64 cbMaxLength, Int32 iOffset, EPadding ePad)
我做错了什么?在 MS 的示例中,这似乎相当简单,所以有些事情搞砸了。是的,在服务器上启用了 CLR。我已经在运行扩展存储过程,它们似乎比 CLR 容易得多。
谢谢,克里斯
【问题讨论】:
-
我记得一个类似的问题,您必须使用 sql server 使用的相同 .NET 框架版本来构建程序集。我认为 2012 年是 4.0,2008 年是 3.5 - 但这些都是猜测。我会尝试查找文档。
-
这可能会帮助您确定有关服务器的详细信息:select * from sys.dm_clr_properties
-
现在是版本 4,程序集使用的是版本 4。我也尝试过 3.5、3.0 和 2.0。结果相同。
标签: c# visual-studio-2010 sql-server-2012 clr