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
GroupeType et MemberUser sont des informations contenues dans le champs Message de ma table2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Table1 -> ID - GroupeType - MemberUser Table2 -> ID - Message
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
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 Blablablablablablabla Nom du compte : CN=Charles Duponts,CN=... etc ...
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 !
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
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 :
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.
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.
J'ai tenté de rajouter une clause
Mais j'obtiens toujours une erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE CHARINDEX(Message,"Nom du compte : CN=")!=0
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