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
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
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 :
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 :
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
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 ?
Partager