2015-04-12 3 views
0

Я пытаюсь создать функцию интеграции CLR в SQL Server 2008 R2, которая будет читать значение Image/Varbinary и возвращает NVARCHAR(MAX).Функция интеграции CLR, которая примет значение Image/Varbinary в качестве ввода

[Microsoft.SqlServer.Server.SqlFunction] 
public static SqlString ConvertByteArrToString(SqlBinary arrByte) 

И в SQL Server -

create function ReadAsString(@varData varbinary(max)) 
returns nvarchar(max) 
as 
    external name CLRFunctions.[CLRFunctions.FormatUtilities].ConvertByteArrToString 

Но, когда я пытаюсь создать выше функции, я получаю эту ошибку:

Msg 6552, Level 16, State 3, Procedure ReadAsString, Line 1
ALTER FUNCTION for "ReadAsString" failed because T-SQL and CLR types for parameter "@varData" do not match.

Может кто-то предложить, что должно быть правильным CLR соответствие для SQL Server Image/Varbinary(MAX)?

+1

http://stackoverflow.com/a/4764583/73226 –

+0

Спасибо Мартину! Это сработало.. – user3927354

ответ

0

Технический ответ на вопрос, как задать: SqlBytes сопоставляется VARBINARY(MAX) при использовании опции развертывания Visual Studio (и нет никакого отображения в IMAGE, которая устарела и не должна использоваться). Но это для старых версий Visual Studio и SSDT (SQL Server Data Tools). В более поздних версиях теперь отображаются SqlString и SqlChars - NVARCHAR(MAX) и SqlBinary и SqlBytes - VARBINARY(MAX). В этом ответе приведены дополнительные сведения: CLR UDF returning Varbinary(MAX).

ОДНАКО, учитывая, что вы используете SQL Server 2008 R2, то эта функция SQLCLR не нужно даже быть создан в первую очередь, поскольку она функциональность встроена в встроенную функцию CONVERT:

SELECT CONVERT(NVARCHAR(MAX), 0x1234ABCD); -- 㐒춫 
SELECT CONVERT(NVARCHAR(MAX), 0x1234ABCD, 0); -- 㐒춫 
SELECT CONVERT(NVARCHAR(MAX), 0x1234ABCD, 1); -- 0x1234ABCD 
SELECT CONVERT(NVARCHAR(MAX), 0x1234ABCD, 2); -- 1234ABCD