我正在尝试在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匹配吗?
答案 0 :(得分:0)
问题的技术答案是:SqlBytes
在使用Visual Studio部署选项时映射到VARBINARY(MAX)
(并且没有映射到IMAGE
已弃用且不应该'使用)。但这适用于旧版本的Visual Studio和SSDT(SQL Server数据工具)。最近的版本现在将SqlString
和SqlChars
映射到NVARCHAR(MAX)
,将SqlBinary
和SqlBytes
映射到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