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)
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.
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
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
Partager