Bonjour à tous,

Je vous explique mon soucis et son contexte.
J'ai actuellement une table de données à remplir ( table1 ) et une table qui contient les informations ( table2 ), le tout sous SQL Server 2008 R2

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Table1 -> ID - GroupeType - MemberUser
Table2 -> ID - Message
GroupeType et MemberUser sont des informations contenues dans le champs Message de ma table2.
Les données dans ma table2 ne sont pas du tout formatées de manière à être coupées simplement. Je me dois de jongler avec la position de certaines suite de caractères.

J'ai dans mon champs message des données formatées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Blablablablablablabla Nom du compte : CN=Charles Duponts,CN=... etc ...
J'effectue une requête de traitement que voici, pour placer dans ma table1 les informations scindées de ma table2 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
UPDATE Table1
SET MemberUser = SUBSTRING(Message,CHARINDEX('Nom du compte : CN=',Message)+19,CHARINDEX(',CN=',Message)-CHARINDEX('Nom du compte : CN=',Message)-19) 
FROM Table2 
WHERE Table1.ID=Table2.ID
En gros, je recherche la position de "Nom du compte : CN=", je prends les données qui sont après, et je m'arrête au début de ",CN=". Je jongle, mais ça fonctionne !

Cependant, j'ai un gros problème. Certains enregistrements ne possèdent pas les données "Nom du compte : CN=". Et pour ces enregistrements, impossible de passer la requête en succès. J'obtiens l'erreur suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Paramètre de longueur non valide passé à la fonction LEFT ou SUBSTRING.
L'instruction a été arrêtée.
Ce qui est plutôt logique. CHARINDEX me renvoie 0 car la fonction ne trouve pas la chaine demandé, et SUBSTRING ne s'effectue donc pas.
J'ai tenté de rajouter une clause
Code : Sélectionner tout - Visualiser dans une fenêtre à part
WHERE CHARINDEX(Message,"Nom du compte : CN=")!=0
Mais j'obtiens toujours une erreur.

En gros, je souhaite modifier ma requête pour qu'elle effectue le traitement sur les enregistrements qui contiennent "Nom du compte : CN=" et ignorer complètement les autres.

Des idées et/ou suggestions ?