Bonjour,
je suis sous SQL server 2000
j'ai une fonction de concaténation de différents champs que j'utilise pour insérer des données dans une 2éme table.
Voici ma fonction :
l'appel à ma fonction se fait via cette requête :
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
21
22
23
24 CREATE FUNCTION FN_CONCAT (@ECR_ID NUMERIC) RETURNS VARCHAR(8000) AS BEGIN DECLARE @CH3 VARCHAR(8000) SET @CH3='' SELECT @CH3=@CH3+ ISNULL(CG_C1,'') + ';' + ISNULL(CG_C2,'') + ';' + ISNULL(CONVERT(VARCHAR(10),CG_C3),'')+';' + ISNULL(CG_C4,'') +';' + ISNULL(CG_C5,'') +';' + ISNULL(CG_C6,'') + ';' FROM T_ECR WHERE CG_ECR_ID=@ECR_ID IF (@CH3 <>'' ) SET @CH3= LEFT(@CH3, LEN(@CH3)-1) RETURN @CH3 END
A faible volume de ma table T_ECR, cette fonction marche trés bien, mais si j'ai beaucoup de données (30000 lignes par exemple dans T_ECR dont 9000 CG_ECR_ID différents) ma fonction prend 18 minutes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 insert into T_TECH (TECH_ID,TECH_C) SELECT distinct CG_ID, dbo.FN_CONCAT(CG_ECR_ID), FROM T_ECR ORDER BY CG_ECR_ID
ma table T_ECR continet juste un index sur sa clé primaire (numéro automatique) et même si je crée un index sur l'ensemble des CG_Cn qui sont sélectionnés dans la concaténation, ceci ne s'améliore pas !
Voyez vous quelques choses pour optimiser ?
Merci.
Partager