Bonjour,
Dans une requête MERGE (UPSERT) j'ai besoin de calculer max+1 d'un champ de la table de destination.
Mon problème c'est que ma requête fait le max+1 mais une fois pour tous les enregistrements
donc je me retrouve avec la mêmes valeur partout (1, 1, 1) au lieu de (1,2,3)
Quand c'est un simple select j'utilise ROW_NUMBER mais là ça ne passe pas.
Exemple très simplifié et très allégé pour testé l'essentiel (en prod dans le merge j'ai bien une partie update)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Declare @T1 as table (A varchar(50),B int); Declare @T2 as table (A varchar(50),B int); INSERT INTO @T2(A,B) values('A',1); INSERT INTO @T2(A,B) values('B',2); MERGE @T1 AS T USING @T2 S ON T.A = S.A WHEN NOT MATCHED BY TARGET THEN INSERT(A,B) VALUES( ( cast(getdate() as varchar(50))) , (ROW_NUMBER() OVER (ORDER BY (SELECT 1)) + (SELECT MAX(B) FROM @T1)) ); select * from @T1 select * from @T2
Merci pour votre aide
Partager