Erreur dans la requête "Paramètre de longueur non valide transmis à la fonction LEFT ou SUBSTRING."

entrez la description de l'image icientrez la description de l'image ici Bonjour dans la requête ci-dessous je suis confronté à un problème de "Paramètre de longueur invalide passé à la fonction GAUCHE ou SUBSTRING." Pouvez-vous s'il vous plaît résoudre cette erreur pour moi afin que je puisse travailler sur la requête.

select subssortingng( a.ProcessInstanceDescription, charindex('http://', a.ProcessInstanceDescription ), charindex('KeyInstr', a.ProcessInstanceDescription ) - charindex('http://', a.ProcessInstanceDescription )), c.StreamName AS Category, ProcessInstanceAppianID as jobId, a.ProcessInstanceName, a.ProcessInstanceTargetDate AS TargetDate, a.ProcessInstanceDescription as TaskDescription, b.Name as department, SUBSTRING( ProcessInstanceName, NULLIF( PATINDEX('%[0-9][0-9][0-9][0-9][0-9]%',ProcessInstanceName), 0), 7) as code from InternalUseOnly..ProcessInstance a join InternalUseOnly..Departments b on b.KeyDepartment = a.KeyDepartmentEntered AND b.updoperation < 2 join InternalUseOnly..ProcessStream c on c.KeyProcessStream = a.KeyProcessStream and c.updoperation < 2 where ProcessInstanceCompleted is null and a.KeyProcessStream in (330) and a.updoperation < 2 

J'ai joint une image ci-dessus. Je ne veux récupérer que les URL de la description de la tâche. Pouvez-vous corriger cette requête ou me donner une requête exacte pour effectuer cette même requête?

Le paramètre de longueur pour SUBSTRING est toujours le paramètre # 3. Ce n'est que lorsque ce paramètre est <0 que cette erreur se produit. Ce qui signifie que vous avez des problèmes avec la première occurrence de SUBSTRING, en particulier cette expression:

 charindex('KeyInstr', a.ProcessInstanceDescription ) - charindex('http://', a.ProcessInstanceDescription ) 

Probablement vous ne pouvez pas find KeyInstr dans le champ ProcessInstanceDescription et c'est pourquoi il échoue.

Comment vous pouvez vous prémunir contre cette erreur dépend de ce que vous voulez faire.

MODIFIER

Une façon de gérer cela est de vérifier si votre jeton a été trouvé ('KeyInstr'). Si ce n'est pas le cas, substituez le résultat à la valeur désirée, que ce soit 0, -1, NULL ou autre chose dont vous avez besoin pour signaler une situation inattendue.

 CASE WHEN charindex('KeyInstr', a.ProcessInstanceDescription) != 0 THEN charindex('KeyInstr', a.ProcessInstanceDescription ) - charindex('http://', a.ProcessInstanceDescription ) ELSE 0 END 

… ou dans votre cas, il serait préférable de faire …

 SELECT CASE WHEN charindex('KeyInstr', a.ProcessInstanceDescription) != 0 THEN subssortingng( a.ProcessInstanceDescription, charindex('http://', a.ProcessInstanceDescription ), charindex('KeyInstr', a.ProcessInstanceDescription ) - charindex('http://', a.ProcessInstanceDescription )) ELSE 0 END, ...