Я пытаюсь создать определенную функцию простой CLR пользователя с помощью Visual Studio 2010 и SQL Server 2012. Он строит просто отлично, но когда я пытаюсь отладки я получаю эту ошибку:SQL CLR проблемы VS2010 SQL Server 2012
SqlClrDeploy:
Beginning deployment of assembly CCOMM_CLR.dll to server Titan : CBMAPP_REMAS
The following error might appear if you deploy a SQL CLR project that was built for a version of the .NET Framework that is incompatible with the target instance of SQL Server: "Deploy error SQL01268: CREATE ASSEMBLY for assembly failed because assembly failed verification". To resolve this issue, open the properties for the project, and change the .NET Framework version. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlClr.targets(96,5): Deploy error SQL: The database version is not supported.Build FAILED
Итак ... Как насчет сборки и развертывания на машине он сам ... Вот код для установки сборки и 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')
Я получаю эту ошибку
Msg 6522, Level 16, State 2, Line 2
A .NET Framework error occurred during execution of user-defined routine or aggregate "HelloXP": System.Data.SqlServer.TruncationException: Trying to convert return value or output parameter of size 14 bytes to a T-SQL type with a smaller size limit of 2 bytes.
System.Data.SqlServer.TruncationException:
at System.Data.SqlServer.Internal.CXVariantBase.StringToWSTR(String pstrValue, Int64 cbMaxLength, Int32 iOffset, EPadding ePad)
Что я делаю неправильно? Это выглядит довольно прямо в примерах MS, поэтому что-то испортилось. Да CLR включен на сервере. У меня уже запущены расширенные хранимые процедуры, и они казались намного проще, чем CLR.
Спасибо, Крис
Я помню аналогичную проблему, когда вам приходилось строить свою сборку с той же версией .NET Framework, что и для SQL-сервера. Я думаю, что в 2012 году было 4.0 и 2008 было 3.5 - но это догадки. Я попытаюсь найти документацию. –
Это может помочь вам определить детали вашего сервера: select * from sys.dm_clr_properties –
Это версия 4, а сборка использует версию 4. Я также пробовал 3.5, 3.0 и 2.0. Те же результаты. – MtnManChris