J'ai voulu utiliser la fonction CONTEXT_INFO() pour stocker des infos au format texte : Cle1=Valeur1, Cle2=Valeur2 etc..
alors j'ai commencé par le script très simple ci-dessous
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
	DECLARE @varbinBuffer  varbinary(128) 
	DECLARE @Buffer VARCHAR(128) ; 
 
       -- Chemin "Aller" c.à.d  Encodage du CONTEXT_INFO 
	SET @Buffer = 'Cle1=Valeur1'; 
	SET @varbinBuffer = CAST(@Buffer AS varbinary(128)) ; 
	SET CONTEXT_INFO  @varbinBuffer 
 
	-- Chemin "Retour" c.à.d Décodage de CONTEXT_INFO ) 
	SET @Buffer = CAST( CONTEXT_INFO() AS varchar(128) ) 
        SET @Buffer = REPLACE(@Buffer, char(0) , char(32) );  -- Non concluant !  ne permet pas de résoudre le problème ! 
	SET @Buffer = LTRIM(RTRIM(@Buffer)); 
	SELECT @buffer As Buffer , '<v>'+ @buffer + '</v>' As Buffer_Xml, 	 
	           LEN(@Buffer) As Len_Buffer, 
		   DATALENGTH(@Buffer) as Datalength_Buffer
Résultat :
Code SQL' : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Buffer			Buffer_Xml			Len_Buffer	Datalength_Buffer
Cle1=Valeur1	<v>Cle1=Valeur1		128			128
Le problème est que je m'attend à avoir dans la colonne Buffer_xml la valeur suivante :
'<v>Cle1=Valeur1</v>'
et comme vous pouvez le constater il manque la balise de fermeture </v>. (Ce qui génère évidement des erreurs dans d'autres traitements XML. (mais là n'est pas le problème, ce dernier, se situe ici, bien en amont).
Ce que je ne comprend pas c'est qu'il devient impossible de rajouter quoi que soit après la variable @Buffer et pour cause, celle-ci est "pleine" (Len_Buffer = 128) et ce qui explique pourquoi l'expression (Buffer_Xml) a été tronquée.

A la fin du script, j'ai tracé le code ascii de chacun des caractères de la variable @Buffer, de la position 1 jusqu'à la position 128, ci-dessous le résultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@I=1  @CodeASCII = 67  --> C
@I=2  @CodeASCII = 108 --> l  (la lettre L minuscule) 
@I=3  @CodeASCII = 101 --> e
@I=4  @CodeASCII = 49  --> 1 
@I=5  @CodeASCII = 61  --> = 
@I=6  @CodeASCII = 86  --> V
@I=7  @CodeASCII = 97  --> a
@I=8  @CodeASCII = 108 --> l   (la lettre L minuscule) 
@I=9  @CodeASCII = 101 --> e 
@I=10 @CodeASCII = 117 --> u 
@I=11 @CodeASCII = 114 --> r 
@I=12 @CodeASCII = 49  --> 1 
@I=13 @CodeASCII = 0
@I=14 @CodeASCII = 0
@I=15 @CodeASCII = 0
....
.... 
@I=126 @CodeASCII = 0
@I=127 @CodeASCII = 0
@I=128 @CodeASCII = 0
Jusqu'à la position 12 tout est OK, mais après ça se gâte ! de la position 13 jusqu'à la position 128, il y a que des char(0) ! Je pense que le problème provient de ces char(0) dont je n'arrive pas à m'en défaire !

Quelqu'un a-t-il déjà rencontré ce problème ? Existe t-il une solution à ce problème ?

Merci.

A+