2015-04-12 25 views
0

我试图在SQL Server 2008 R2中创建CLR集成函数,它将读取Image/Varbinary值并返回NVARCHAR(MAX)CLR集成函数将把图像/变量值作为输入

[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当使用Visual Studio部署选项(并且没有映射到IMAGE已被弃用且不应使用)时映射到VARBINARY(MAX)。但是,这是针对较早版本的Visual Studio和SSDT(SQL Server数据工具)。更新版本现在将SqlStringSqlChars映射到NVARCHAR(MAX)SqlBinarySqlBytesVARBINARY(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