首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL问题VS2010 Server 2012

SQL问题VS2010 Server 2012
EN

Stack Overflow用户
提问于 2015-01-07 21:07:00
回答 1查看 3.4K关注 0票数 3

我正在尝试使用Visual 2010和Server 2012创建一个简单的CLR用户定义函数。它构建得很好,但是当我尝试调试时,我得到了以下错误:

SqlClrDeploy: 开始将程序集CCOMM_CLR.dll部署到服务器Titan : CBMAPP_REMAS 如果为与Server目标实例不兼容的.NET框架版本部署SQL项目,可能会出现以下错误:“部署错误SQL01268:为程序集创建程序集失败,因为程序集验证失败”。若要解决此问题,请打开项目的属性,并更改.NET框架版本。C:\Program (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlClr.targets(96,5):部署错误SQL01234:不支持数据库版本。 构建失败

所以..。在机器上自行构建和部署怎么样?下面是安装程序集和UDF的代码

代码语言:javascript
复制
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

代码语言:javascript
复制
public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlString HelloWorld(SqlString theName)
    {
        // Put your code here
        return  "Hello " + theName;
    }
};

程序集和UDF的安装工作正常,但当我运行它时.

代码语言:javascript
复制
Select Master.dbo.HelloXP('Chris')

我知道这个错误

Msg 6522,第16级,状态2,第2行 .NET框架错误发生在执行用户定义的例程或聚合"HelloXP":System.Data.SqlServer.TruncationException:试图将大小为14字节的返回值或输出参数转换为具有较小的大小限制为2字节的type类型。 System.Data.SqlServer.TruncationException: System.Data.SqlServer.Internal.CXVariantBase.StringToWSTR(String pstrValue,Int64 cbMaxLength,Int32 iOffset,EPadding ePad)

我做错了什么?在MS的例子中,这看起来相当直接,所以有些事情搞砸了。是的,在服务器上启用了CLR。我已经在运行扩展存储过程,它们似乎比CLR容易得多。

谢谢,克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-07 21:32:28

关于你的第一期:

部署错误SQL01234:不支持数据库版本。

我不知道确切的解决方案,但由于SQL Server 2012在Visual 2010发布时还没有发布,而且SQL Server 2012引入了一个新版本的表格数据流(TDS)协议,而Visual 2010工具还不知道该协议,所以用Visual 2012或更高版本编译似乎可以解决这个问题。

关于你的第二个问题:

.NET框架错误发生在用户定义的例程或聚合HelloXP__:System.Data.SqlServer.TruncationException__执行过程中:试图将大小为14字节的返回值或输出参数转换为具有较小的大小限制为2字节的type类型。

您已经将UDF的返回类型声明为NVARCHAR

代码语言:javascript
复制
CREATE FUNCTION HelloXP (@Name NVARCHAR)
RETURNS NVARCHAR
…

根据NVARCHAR,如果省略容量规范,则假定容量为1个字符(即2个字节)。在C#方法("Hello " + theName)中创建的字符串包含超过1个字符(至少6个来自"Hello "),因此被截断;因此,运行时异常。

尝试将返回类型更改为类似于NVARCHAR(100)NVARCHAR(MAX)的类型。输入参数@Name也是如此。确保返回类型的容量至少比@Name的容量多6个字符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27828662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档