SQL Server 2008 convertir varchar en varbinary

J'essaie d'importer des données d'image dans un server sql 2008 avec un code comme celui-ci:

INSERT INTO [TAB] (ID_PHOTO,PHOTO) VALUES( CAST('333EFB54-7062-E043-F088-FE0A916C0297' as uniqueidentifier), CONVERT(varbinary(max),'0xFFD8FFE000') ) 

La string est juste un mannequin, mais quand je fais l'insertion j'ai trouvé quelque chose comme ça dans la database

 0x307846464438464645303030 

ce qui n'est pas exactement ce à quoi je m'attendais. Est-ce que quelqu'un sait ce que j'ai mal fait?

Le problème ici est simplement qu'une string – '0xFFD8FFE000' – est convertie en VARBINARY , et donc chaque caractère – d'abord 0 , puis x , puis F , et ainsi de suite – est "converti" en sa représentation hexadécimale:

 Character -- Hex value 0 30 x 78 F 46 F 46 D 44 8 38 F 46 F 46 E 45 0 30 0 30 0 30 

Ainsi, le 0xFFD8FFE000 été vu comme une string de caractères, tout comme "c'est un test", plutôt que comme une séquence d'octets.

Heureusement, le correctif est assez simple: il suffit d'append une valeur "style" de 1 pour le troisième paramètre optionnel à CONVERT :

 SELECT CONVERT(VARBINARY(MAX), '0xFFD8FFE000', 1); -- 0xFFD8FFE000 

Ce que vous voyez est correct. Vous devriez être en mesure d'exécuter ce qui suit pour voir que la conversion se passe correctement (en gros, convertissez la valeur varbinary dans votre database en VARCHAR):

 SELECT CONVERT(varbinary(max),'0xFFD8FFE000') SELECT CONVERT(varchar(100), 0x307846464438464645303030) 

OU

 SELECT CONVERT(varchar(100), CONVERT(varbinary(max),'0xFFD8FFE000')) 

Notez le manque de guillemets simples autour de la valeur varbinary – pas nécessaire dans SQL Server