CLR集成函数,它将Image / Varbinary值作为输入

时间:2015-04-12 19:31:42

标签: sql-server sql-server-2008-r2 sqlclr varbinarymax

我正在尝试在SQL Server 2008 R2中创建一个CLR集成函数,该函数将读取Image/Varbinary值并返回NVARCHAR(MAX)

[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
  “ReadAsString”的ALTER FUNCTION失败,因为参数“@varData”的T-SQL和CLR类型不匹配。

有人可以建议SQL Server Image/Varbinary(MAX)的正确CLR匹配吗?

1 个答案:

答案 0 :(得分:0)

问题的技术答案是:SqlBytes在使用Visual Studio部署选项时映射到VARBINARY(MAX)(并且没有映射到IMAGE已弃用且不应该'使用)。但这适用于旧版本的Visual Studio和SSDT(SQL Server数据工具)。最近的版本现在将SqlStringSqlChars映射到NVARCHAR(MAX),将SqlBinarySqlBytes映射到VARBINARY(MAX)。此答案中提供了一些其他详细信息:CLR UDF returning Varbinary(MAX)

HOWEVER ,假设您使用的是SQL Server 2008 R2,则首先不需要创建此SQLCLR函数,因为它是内置于CONVERT内置的功能-in功能:

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