0

我正在尝试在 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

但是,当我尝试创建上述函数时,出现此错误:

消息 6552,级别 16,状态 3,过程 ReadAsString,第 1 行
“ReadAsString”的 ALTER FUNCTION 失败,因为参数“@varData”的 T-SQL 和 CLR 类型不匹配。

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

4

1 回答 1

0

所问问题的技术答案是:在使用 Visual Studio 部署选项时映射到(并且没有SqlBytes不推荐使用且不应使用的映射)。但这是针对旧版本的 Visual Studio 和 SSDT(SQL Server Data Tools)。较新的版本现在将and映射到, and和to 。此答案中提供了一些其他详细信息:CLR UDF 返回 Varbinary(MAX)VARBINARY(MAX)IMAGESqlStringSqlCharsNVARCHAR(MAX)SqlBinarySqlBytesVARBINARY(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
于 2016-04-08T16:07:28.740 回答