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