2015-04-12 73 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