2015-04-12 2 views
0

J'essaye de créer une fonction d'intégration CLR dans SQL Server 2008 R2 qui lira une valeur Image/Varbinary et retournera NVARCHAR(MAX).Fonction d'intégration CLR qui prendra une valeur Image/Varbinary en entrée

[Microsoft.SqlServer.Server.SqlFunction] 
public static SqlString ConvertByteArrToString(SqlBinary arrByte) 

Et dans SQL Server -

create function ReadAsString(@varData varbinary(max)) 
returns nvarchar(max) 
as 
    external name CLRFunctions.[CLRFunctions.FormatUtilities].ConvertByteArrToString 

Mais, lorsque je tente de créer au-dessus de la fonction, je reçois cette erreur:

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.

Quelqu'un peut-il suggérer ce qui devrait être le bon CLR correspondre pour SQL Server Image/Varbinary(MAX)?

+1

http://stackoverflow.com/a/4764583/73226 –

+0

Merci Martin! Ça a marché.. – user3927354

Répondre

0

La réponse technique à la question posée est: SqlBytes cartes à VARBINARY(MAX) lorsque vous utilisez l'option de déploiement Visual Studio (et il n'y a pas de correspondance à IMAGE qui est dépréciée et ne doit pas être utilisé). Mais c'est pour les anciennes versions de Visual Studio et SSDT (SQL Server Data Tools). Les versions les plus récentes représentent maintenant SqlString et SqlChars à NVARCHAR(MAX), et SqlBinary et SqlBytes à VARBINARY(MAX). Certains détails supplémentaires sont fournis dans cette réponse: CLR UDF returning Varbinary(MAX).

CEPENDANT, étant donné que vous utilisez SQL Server 2008 R2, cette fonction SQLCLR n'a même pas besoin d'être créé en premier lieu car il est une fonctionnalité intégrée dans la CONVERT fonction intégrée:

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