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
Résultat :
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
Le problème est que je m'attend à avoir dans la colonne Buffer_xml la valeur suivante :
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
'<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 :
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 !
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
Quelqu'un a-t-il déjà rencontré ce problème ? Existe t-il une solution à ce problème ?
Merci.
A+
Partager