Bonjour à tous voila mon problème, j'ai 2 tables :

Une qui contient plusieurs lignes pour une meme adresse mail et pour chaque ligne une valeur differente dans le champ operation

Une 2nd avec les adresses mail dédoublonnées.

Je souhaite faire un update de la seconde pour obtenir une concatenation des code opé de la première

J'ai fait un petit script qui est sensé réaliser cette opération, mais je me rend compte que mes code opé ne sont pas concaténés. (a noter que je traite les données par lot de 10000 enregistrement)

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
25
 
DECLARE @RowIndexMin INT;
DECLARE @RowIndexMax INT;
DECLARE @RowCount INT;
--Initialisation des variables
SET @RowIndexMin = 0;
SET @RowIndexMax = 10000;
SET @RowCount = 1;
--Select pour récupérer les lignes à traiter :
WHILE @RowCount > 0
BEGIN
	WITH GroupedData AS 
	(
		SELECT ROW_NUMBER() OVER(ORDER BY email) RowIndex, *  FROM Table1
	)
	-- MAJ du lot de lignes
	UPDATE D SET 
		D.[listeOpe] = ISNULL(D.[listeOpe],'') + '_' + CONVERT(VARCHAR(MAX),G.[codeOpe]) + '_;'
	FROM Table2 D INNER JOIN GroupedData G ON D.email = G.email WHERE @RowIndexMin <= G.RowIndex AND G.RowIndex <= @RowIndexMax;
	SET @RowCount = (SELECT @@ROWCOUNT);
	--MAJ des borne pour sélectionner le prochain lot de lignes
	SET @RowIndexMin = @RowIndexMin + 100001;
	SET @RowIndexMax = @RowIndexMax + 100001;
 
END
Pour moi la jointure ci dessus, pour une adresse mail, va faire autant d'update qu'il y a de ligne correspande dans la première table mais ca ne semble pas le cas.

Du coup je vois pas trop comment résoudre ce problème sans passer par des curseurs. si vous avez des idées je suis preneur.

Olivier